我正在尝试使用从其他数据帧(df2)接收到的数据更新现有数据帧(df1)。数据框df2可以具有新列,新行或新数据。这是我要完成的示例。
df1
var1 var2 var3
a 8 4 12
b -1 -4 -3
c 9 12 11
d 12 15 7
e 1 3 12
f 2 4 6
df2(请注意,这与df1几乎一样,除了它没有var1列,具有新列var4,具有var3的更新值,var2相同并且具有新行“ month s3”)。
var2 var3 var4
a 4 10 12
b -4 0 4
c 12 15 9
d 15 12 5
e 3 17 7
f 4 16 8
g 0 0 4
这应该是更新的df
var1 var2 var3 var4
a 8 4 10 12
b -1 -4 0 4
c 9 12 15 9
d 12 15 12 5
e 1 3 17 7
f 2 4 16 8
g 0 0 0 4
完成此任务的最佳方法是什么? (我特别想添加df2中可能存在的任何额外的行)。
答案 0 :(得分:1)
由于两个数据框都共享索引,因此将它们组合起来的最简单方法是执行外部联接:
df = df1.join(df2, how='outer', lsuffix='_l').fillna(0).astype(int)
lsuffix
在左侧数据框中用重复的'_l'
标记重复的列。 fillna
用零填充左侧数据框中的缺失值。最后,删除重复的列:
df = df.loc[:,~df.columns.str.endswith('_l')]