我有两个数据框。

data1 = {'col4':['Tom', 'nick', 'krish', 'jack'],
        'col5':[20, 21, 19, 18]}
df1 = pd.DataFrame(data1)
     col4  col5
0    Tom    20
1   nick    21
2  krish    19
3   jack    18


data2 = {'col1':['xxx', 'yyy', 'zzz', 'xxx','yyy', 'xxx', 'yyy', 'zzz'],
        'col2':['Tom', 'nick', 'krish', 'jack','Tom', 'nick', 'krish', 'jack'],
        'col3':[110, 121, 119, 118,141,156,176,186]}
df2 = pd.DataFrame(data2)
  col1   col2  col3
0  xxx    Tom    110
1  yyy   nick    121
2  zzz  krish    119
3  xxx   jack    118
4  yyy    Tom    141
5  xxx   nick    156
6  yyy  krish    176
7  zzz   jack    186


我需要在基于col2和col4的df2数据框中包含col5。 col2中重复值的col5值应分配为0(第一个值除外)。例如,Tom正在重复,并且在与df1合并后,仅将Tom(索引0)的第一个值分配给20。 Tom的另一个值应为0(索引4)。
我想要作为结果的dataframe列为:

  col1   col2  col3  col5
0  xxx    Tom   110   20
1  yyy   nick   121   21
2  zzz  krish   119   19
3  xxx   jack   118   18
4  yyy    Tom   141    0
5  xxx   nick   156    0
6  yyy  krish   176    0
7  zzz   jack   186    0


请帮助我实现这一目标。
提前致谢。

最佳答案

合并并使用np.where()series.duplicated()应用条件:

final = df2.merge(df1, how='left', left_on='col2', right_on='col4')
final.col5 = np.where(final.duplicated(['col2', 'col5']), 0, final.col5)
print(final)




  col1   col2  col3   col4  col5
0  xxx    Tom   110    Tom    20
1  yyy   nick   121   nick    21
2  zzz  krish   119  krish    19
3  xxx   jack   118   jack    18
4  yyy    Tom   141    Tom     0
5  xxx   nick   156   nick     0
6  yyy  krish   176  krish     0
7  zzz   jack   186   jack     0

关于python - Pandas 数据框与分配有特定值的重复项合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56790740/

10-12 00:12
查看更多