[英]Matching two columns from Pandas Dataframe but the order matters
我有兩個DataFrames
df_1 :
idx A X
0 1 A
1 2 B
2 3 C
3 4 D
4 1 E
5 2 F
和df_2 :
idx B Y
0 1 H
1 2 I
2 4 J
3 2 K
4 3 L
5 1 M
我的目標是得到以下結果: df_result :
idx A X B Y
0 1 A 1 H
1 2 B 2 I
2 4 D 4 J
3 2 F 2 K
我正在嘗試根據df_2中的B
列來匹配A
和B
列。
A
列和B
列在達到 4 后重復其內容。這里的順序很重要,因為 df_1 中idx = 4
的行與df_2中 idx = idx = 5
的行不匹配。
我試圖使用:
matching = list(set(df_1["A"]) & set(df_2["B"]))
接着
df1_filt = df_1[df_1['A'].isin(matching)]
df2_filt = df_2[df_2['B'].isin(matching)]
但這沒有考慮順序。
我正在尋找一個沒有很多 for 循環的解決方案。
編輯:
df_result = pd.merge_asof(left=df_1, right=df_2, left_on='idx', right_on='idx', left_by='A', right_by='B', direction='backward', tolerance=2).dropna().drop(labels='idx', axis='columns').reset_index(drop=True)
得到我想要的。
IIUC 這應該有效:
df_result = df_1.merge(df_2,
left_on=['idx', 'A'], right_on=['idx', 'B'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.