我有两个 df 包含我希望合并和覆盖特定值的内容。使用下面,df1
和 df2
将被合并,我希望为某些行覆盖 Group
中的值。具体来说,Group
是 == Y
,我想使用 df2
中的值。我有办法,但我认为效率不高。
df1 = pd.DataFrame({
'Time' : [1,1,1,1,2,2,2,2,2],
'Label' : ['A','B','C','D','A','B','C','D','E'],
'Group' : ['X','X','X','Y','X','Y','X','Y','X'],
})
df2 = pd.DataFrame({
'Time' : [1,2,2],
'Label' : ['D','B','D'],
'Group2' : ['Y1','Y3','Y2'],
})
df_out = pd.merge(df1,df2, how = 'outer')
出:
Time Label Group Group2
0 1 A X NaN
1 1 B X NaN
2 1 C X NaN
3 1 D Y Y1
4 2 A X NaN
5 2 B Y Y3
6 2 C X NaN
7 2 D Y Y2
8 2 E X NaN
然后我可以将 Group2
复制到 Group
不包括 NaN 值然后删除 Group2
但有没有更有效的方法
答案 0 :(得分:1)
如果我理解正确,您想用 df1['Group']
值更新 df2['Group2']
:
df1["Group"].update(df1.merge(df2, on=["Time", "Label"], how="outer")["Group2"])
print(df1)
打印:
Time Label Group
0 1 A X
1 1 B X
2 1 C X
3 1 D Y1
4 2 A X
5 2 B Y3
6 2 C X
7 2 D Y2
8 2 E X