[英]How do I merge two DFs with python if two columns match across DFs
df1 是 all_cases
df2 是 all_bca
如果EFE / Manual E-Form / Gate Pass No.
或Realization Date
在两个 dfs 中匹配,则以下代码合并all_cases和all_bca(3 列) 。
cross = pd.merge(all_cases,\
all_bca[['EFE / Manual E-Form / Gate Pass No.','Realization Date','BCA(FC)',\
'Foreign Bank Charges','Agent/Brokerage Commision'
]], on=('EFE / Manual E-Form / Gate Pass No.','Realization Date'), how='left')
如果两列匹配,我想合并。 我该怎么做。
all_cases
EFE / Manual E-Form / Gate Pass No. Realization Date
123456 1/1/2019
789654 2/18/2019
852147 1/3/2018
93258 1/4/2019
all_bca
EFE / ...... Realization Date BCA(FC) Charges Commision
123456 8/1/2019 88 8 8
789654 2/18/2019 300 30 10
852147 1/3/2018 500 25 20
93258 1/4/2019 1000 20 30
2530245 1/1/2019 333 33 33
想要的结果
EFE Realization Date BCA(FC) Charges Commision Check
123456 1/1/2019 - - - Not Match
789654 2/18/2019 300 30 10 Match
852147 1/3/2018 500 25 20 Match
93258 1/4/2019 - - - Not Match
电流输出
EFE Realization Date BCA(FC) Charges Commision Check
123456 1/1/2019 88 8 8 Match
789654 2/18/2019 300 30 10 Match
852147 1/3/2018 500 25 20 Match
93258 1/4/2019 1000 20 30 Match
使用带有默认内部连接的 pd.merge
all_cases = pd.DataFrame([['123456','1/1/2019'],['789654','2/18/2019'],['852147','1/3/2018'],['93258','1/4/2019 ']],
columns=['EFE / Manual E-Form / Gate Pass No.','Realization Date'])
all_bca = pd.DataFrame([['123456','8/1/2019','88','8','8'],
['789654','2/18/2019','300','30','10'],
['852147','1/3/2018','500','25','20'],
['93258','1/4/2019','1000','20','30'],
['2530245','1/1/2019','333','33','33']],
columns=['EFE / Manual E-Form / Gate Pass No.','Realization Date','BCA(FC)','Charges','Commision'])
cross = all_cases.merge(all_bca,
on=['EFE / Manual E-Form / Gate Pass No.','Realization Date'],
how='inner')
print(cross)
输出:
EFE / Manual E-Form / Gate Pass No. Realization Date ... Charges Commision
0 789654 2/18/2019 ... 30 10
1 852147 1/3/2018 ... 25 20
[2 rows x 5 columns]
编辑1:
如果您想保持 all_cases 不变,请尝试以下操作:
cross = all_cases.merge(all_bca,
on=['EFE / Manual E-Form / Gate Pass No.','Realization Date'],
how='right',
indicator='check')
print(cross)
输出:
EFE / Manual E-Form / Gate Pass No. Realization Date ... Commision check
0 789654 2/18/2019 ... 10 both
1 852147 1/3/2018 ... 20 both
2 123456 8/1/2019 ... 8 right_only
3 93258 1/4/2019 ... 30 right_only
4 2530245 1/1/2019 ... 33 right_only
[5 rows x 6 columns]
带有 check=='both' 的行是匹配的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.