簡體   English   中英

匹配 Pandas Dataframe 中的兩列,但順序很重要

[英]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列來匹配AB列。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM