使用熊猫通过软键和硬键的组合来连接复合键

时间:2019-06-17 02:42:52

标签: python pandas join

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

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

应该在某个范围内连接软键,而不是精确匹配。 在pandas.merge_asof中被称为tolerance。例如,如果key为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)

完成任务?

谢谢

1 个答案:

答案 0 :(得分:2)

这是从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"
相关问题