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