[英]How to filter dataframe by values from columns in other dataframe thats different size in python?
[英]dataframe assign columns from other dataframe with different size by key
我有兩個數據框:
df1 =
key A B C
r1 1 2 7
r2 6 3 3
df2 =
key A B C D E
r1 1 2 3 4 7
r1 1 3 2 1 5
r2 5 7 1 2 2
r2 6 2 4 9 3
r3 1 2 7 7 1
r4 9 0 2 1 2
我想在 df1 中添加一列 E,因此它將從 df2 中第一次出現該鍵中獲取值。
所以 df1 將是:
df1 =
key A B C E
r1 1 2 7 7
r2 6 3 3 2
最好的方法是什么?
使用GroupBy.first
和DataFrame.join
:
df = df1.join(df2.groupby('key')['E'].first(), on='key')
print (df)
key A B C E
0 r1 1 2 7 7
1 r2 6 3 3 2
或DataFrame.drop_duplicates
與DataFrame.merge
:
df = df1.merge(df2.drop_duplicates('key')[['key','E']], on='key', how='left')
print (df)
key A B C E
0 r1 1 2 7 7
1 r2 6 3 3 2
編輯:
如果可能,列E
不存在用Index.intersection
修改第二個解決方案:
print (df2)
key A B C D E1
0 r1 1 2 3 4 7
1 r1 1 3 2 1 5
2 r2 5 7 1 2 2
3 r2 6 2 4 9 3
4 r3 1 2 7 7 1
5 r4 9 0 2 1 2
cols = ['key'] + df2.columns.intersection(['E']).tolist()
print (cols)
['key']
df = df1.merge(df2.drop_duplicates('key')[cols], on='key', how='left')
print (df)
key A B C
0 r1 1 2 7
1 r2 6 3 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.