首页 > 解决方案 > 合并和覆盖 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

然后我可以复制Group2Group排除 NaN 值,然后删除Group2,但有没有更有效的方法

标签: pythonpandas

解决方案


如果我理解正确,您想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

推荐阅读