首页 > 解决方案 > 使用 pandas 加入混合软键和硬键的复合键

问题描述

我正在寻找一种在熊猫中进行部分软连接的方法,这意味着我有复合连接键

["soft_key", "hard_key_1", "hard_key_2"]

软键应该在某个范围内加入,而不是精确匹配。在pandas.merge_asof它被称为tolerance。例如,如果键为 10 且容差为 2,则会发生以下连接:

表格1

soft_key | hard_key_1 | hard_key_2 | val_1
10       | 2          | 5          | "Jo"
20       | 1          | 1          | "Lu"

表2

soft_key | hard_key_1 | hard_key_2 | val_2 
12       | 2          | 5          | "Mary"
10       | 3          | 5          | "Helen"
25       | 1          | 1          | "Nancy"

加入

val1 | val2
"Jo" | "Mary"

*为了简短起见,我没有包括加入的钥匙。

似乎pandas.merge_asof会加入软键,但我如何加入软键和硬键的组合?

是否有可能以某种方式结合

table1.merge(table2, how="left", on=[hard_key_1, hard_key2])

pd.merge_asof(table1, table2, on='soft_key', tolerance=2)

完成任务?

谢谢

标签: pythonpandasjoin

解决方案


这是一种方法merge_asof

pd.merge_asof(df2.sort_values('soft_key'),df1.sort_values('soft_key'),by=['hard_key_1','hard_key_2'],on='soft_key',tolerance=2).dropna()
   soft_key  hard_key_1  hard_key_2   val_2 val_1
1        12           2           5  "Mary"  "Jo"

推荐阅读