[英]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.