我的数据框类似于下面
df1:
user name length job
0 5234 Ed 7 manager
1 4793 Mark 14 admin
2 9321 Nick 8 admin
3 8149 Duncan 3 admin
4 3742 John 9 admin
5 7315 Lucy 12 admin
6 6541 Heidi 25 admin
DF 2:
user name open click
0 5234 Ed 3 1
1 4793 Mark
2 9321 Nick 5 4
3 8149 Duncan 1 0
4 8149 Duncan 2 1
5 3742 John 21 3
6 6541 Heidi 7 2
我想要的结果是:
user name length job open click
0 5234 Ed 7 manager 3 1
1 4793 Mark 14 admin NaN Nan
2 9321 Nick 8 admin 5 4
3 8149 Duncan 3 admin 3 1
4 3742 John 9 admin 21 3
5 7315 Lucy 12 admin NaN NaN
6 6541 Heidi 25 admin 7 2
目前我正在使用此代码:
df3 = pd.merge(df1, df2, left_on='user', right_on='user', how='left',
suffixes=('', '_y')).filter(regex='^(?!.*_y)')
但是,当我使用此代码合并它们时,我最终得到 Duncan 的重复行而不是一行。请问我怎样才能实现这个目标?我应该补充一点,我的实际 dfs 有几百行长 - 大多数合并都很好,但有几个是重复的。
由于您在 df2 上有 Duncan 的多个记录,因此您需要在合并之前将值求和为:
df2_merged = df2.groupby(['user', 'name'], as_index=False).sum()
print('df2_merged\n',df2_merged)
Output:
df2_merged
user name open click
0 3742 John 21.0 3.0
1 4793 Mark 0.0 0.0
2 5234 Ed 3.0 1.0
3 6541 Heidi 7.0 2.0
4 8149 Duncan 3.0 1.0
5 9321 Nick 5.0 4.0
在此预处理步骤之后,您可以与 df1 合并:
df3=df1.merge(df2_merged,left_on=['user','name'], right_on=['user','name'], how='left')
最后,您可以填写 Nans 或零分机。