合并和覆盖熊猫 df

时间:2021-04-01 00:25:23

标签: python pandas

我有两个 df 包含我希望合并和覆盖特定值的内容。使用下面,df1df2 将被合并,我希望为某些行覆盖 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 但有没有更有效的方法

1 个答案:

答案 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