我正在寻找一种在熊猫中进行部分软连接的方法,这意味着我具有复合连接键
["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)
完成任务?
谢谢
答案 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"