簡體   English   中英

如何比較列不唯一的兩個不同數據框的兩個列?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM