[英]How to compare two columns of two different dataframes whose columns are not unique?
我有两个不同的数据框:df1和df2
df1 :
Id lkey
0 foo foo
1 bar bar
2 baz baz
3 foo foo
4 bar bar
5 foo foo
6 bar bar
7 bar bar
8 bar bar
df2 :
e rkey value y
0 aaa foo aaa foo
1 NaN bar bbb bar
2 ccc baz ccc baz
3 NaN mac ddd fff
4 NaN xyz eee mmm
5 NaN mnb fff NaN
6 NaN foo aaa NaN
Edit1:添加了第六行作为重复项。
我想在此数据帧上执行一项任务。 我想比较lkey和rkey列。
编辑2:
注意: lkey列包含所有重复值,而rkey列包含一些重复值。
拾取lkey列的第一个值,即foo,将该值与数据帧的rkey列的值进行比较。 如果找到匹配项,我想知道df1数据帧列名称中该行的value列的值是否匹配。 (在每种情况下,lkey和rkey都会匹配,即df1的rkey值可在df2的rkey列中找到。)
我已经尝试过merge 。
result = df1.merge(df2, left_on='lkey', right_on='rkey', how='outer')
输出:
Id lkey e rkey value y
0 foo foo aaa foo aaa foo
1 foo foo aaa foo aaa foo
2 foo foo aaa foo aaa foo
3 bar bar NaN bar bbb bar
4 bar bar NaN bar bbb bar
5 bar bar NaN bar bbb bar
6 bar bar NaN bar bbb bar
7 bar bar NaN bar bbb bar
8 baz baz ccc baz ccc baz
9 NaN NaN NaN mac ddd fff
10 NaN NaN NaN xyz eee mmm
11 NaN NaN NaN mnb fff NaN
我不要11行。 在我的df1中,Id和lkey列只有9行可用。 我只想添加具有特定映射的匹配列。
预期产量:
Id lkey match
0 foo foo aaa
1 bar bar bbb
2 baz baz ccc
3 foo foo aaa
4 bar bar bbb
5 foo foo aaa
6 bar bar bbb
7 bar bar bbb
8 bar bar bbb
我如何实现自己想做的事?
编辑:以前我说过rkey列包含唯一值,但是我正因为这个原因,rkey列包含重复值。
>>> (df1
.merge(df2[['rkey', 'value']].drop_duplicates(), left_on='lkey', right_on='rkey', how='left')
.drop('rkey', axis='columns')
.rename(columns={'value': 'match'})
)
Id lkey match
0 foo foo aaa
1 bar bar bbb
2 baz baz ccc
3 foo foo aaa
4 bar bar bbb
5 foo foo aaa
6 bar bar bbb
7 bar bar bbb
8 bar bar bbb
如果两个数据框中的键列具有相同的名称,则只需使用on='key'
,而无需删除正确的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.