我有两个(或多个)数据框,我想相互附加(或以某种方式进行外部合并)。如何确保可以附加两个数据帧,但是同时,如果索引相同,我想使用第二个(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
任何帮助将不胜感激!
谢谢
答案 0 :(得分:1)
对于这种特殊情况,考虑更新,可以将pd.concat()
与参数ignore_index=True
和drop_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)
您也可以merge
和fillna
:
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