合并/追加熊猫数据框,但更新重叠的行

时间:2020-01-30 13:47:24

标签: python pandas

我有两个(或多个)数据框,我想相互附加(或以某种方式进行外部合并)。如何确保可以附加两个数据帧,但是同时,如果索引相同,我想使用第二个(dfB)数据帧更新变量的值。 举例说明:

dfA = 
Index Var1
A     5 
B     6
C     7

dfB = 
Index Var1
A     6
D     8
E     10

所需的输出应为

output = 
Index Var1
A     6
B     6
C     7
D     8
E     10

任何帮助将不胜感激!

谢谢

2 个答案:

答案 0 :(得分:1)

对于这种特殊情况,考虑更新,可以将pd.concat()与参数ignore_index=Truedrop_duplicates(['index'])一起使用

output = pd.concat([dfA,dfB],ignore_index=True)drop_duplicates(['index'],keep='last')

示例:

A = {'Index':['A','B','C'],'Var1':[5,6,7]}
B = {'Index':['A','D','E'],'Var1':[6,7,8]}
dfA = pd.DataFrame(A)
dfB = pd.DataFrame(B)
output = pd.concat([dfA,dfB],ignore_index=True).drop_duplicates(['Index'],keep='last')
print(output)

  Index  Var1
1     B     6
2     C     7
3     A     6
4     D     7
5     E     8

此后,如果要根据给定的列set_index()按字母顺序对数据框进行排序,则可以使用sort_values()Index

答案 1 :(得分:1)

您也可以mergefillna

final = (df1.merge(df2,on='Index',how='outer',suffixes=('_x',''))
       .assign(Var1 = lambda x: x['Var1'].fillna(x['Var1_x']))[df1.columns])

  Index  Var1
0     A   6.0
1     B   6.0
2     C   7.0
3     D   8.0
4     E  10.0