[英]Comparing 2 columns of two Python Pandas dataframes and getting the common rows
我有 2 個數據框,如下所示:
DF1=
A B C D
0 AA BA KK 0
1 AD BD LL 0
2 AF BF MM 0
DF2=
K L
0 AA BA
1 AD BF
2 AF BF
最后我想得到的是:
DF1=
A B C D
0 AA BA KK 1
1 AD BD LL 0
2 AF BF MM 1
所以,我想比較兩個數據幀,我想查看第一個數據幀的哪些行(對於 A 列和 B 列)與第二個數據幀(列 K 和 L)相同,並在第一個數據幀的 D 列上分配 1。
我可以使用 for 循環,但是對於大量條目,它會很慢。
任何線索或建議將不勝感激。
如果你重命名df2
的列然后你可以按行比較,這會更容易:
In [35]:
df2.columns = ['A', 'B']
df2
Out[35]:
A B
0 AA BA
1 AD BF
2 AF BF
In [38]:
df1['D'] = (df1[['A', 'B']] == df2).all(axis=1).astype(int)
df1
Out[38]:
A B C D
0 AA BA KK 1
1 AD BD LL 0
2 AF BF MM 1
這就是我解決它的方式:
df1 = pd.DataFrame({"A":['AA','AD','AD'], "B":['BA','BD','BF']})
df2 = pd.DataFrame({"A":['AA','AD'], 'B':['BA','BF']})
df1['compressed']=df1.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1)
df2['compressed']=df2.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1)
df1['Success'] = df1['compressed'].isin(df2['compressed']).astype(int)
print df1
A B compressed Success
0 AA BA AABA 1
1 AD BD ADBD 0
2 AD BF ADBF 1
DF1.merge(right=DF2,left_on=[DF1.A,DF1.B],right_on=[DF2.K,DF2.L], indicator=True, how='left')
得到:
ABCDKL _merge 0 AA BA KK 0 AA BA both 1 AD BD LL 0 NaN NaN left_only 2 AF BF MM 0 AF BF both
因此,如上所述,指標完成工作。
彼得
df1['ColumnName'].isin(df2['ColumnName']).value_counts()
如何通過不重命名列名來獲得相同的輸出?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.