[英]Merge and overwrite values in pandas df
我有两个包含我希望合并和覆盖特定值的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
但有没有更有效的方法
如果我理解正确,您想用df2['Group2']
值更新df1['Group']
:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.