Python 使用pandas连接软键和硬键混合的复合键
我正在寻找一种方法来做熊猫部分软连接,这意味着我有复合连接键Python 使用pandas连接软键和硬键混合的复合键,python,pandas,join,Python,Pandas,Join,我正在寻找一种方法来做熊猫部分软连接,这意味着我有复合连接键 ["soft_key", "hard_key_1", "hard_key_2"] 软键应该在某个范围内连接,而不是精确匹配。 在pandas.merge\u asof中,它被称为公差。例如,如果键为10,公差为2,则会发生以下连接: 表1 soft_key | hard_key_1 | hard_key_2 | val_1 10 | 2 | 5 | "Jo" 20 | 1
["soft_key", "hard_key_1", "hard_key_2"]
软键应该在某个范围内连接,而不是精确匹配。
在pandas.merge\u asof
中,它被称为公差
。例如,如果键为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"
加入
*我并没有包括键加入为简短
好像是熊猫。merge_asof会在软键上加入,但如何在软键和硬键的组合上加入
有可能以某种方式结合起来吗
table1.merge(table2, how="left", on=[hard_key_1, hard_key2])
及
完成任务
谢谢这里有一个从
merge\u 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"
这里有一种来自
merge\u 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"
谢谢,你能详细说明一下这段代码中发生了什么吗?我猜需要排序来加速连接?@YohanRoth排序是merge_asof必须的,你也可以检查我测试的链接,看起来公差只考虑在负方向上,就像它最多是左键一样,但公差量可以小于左键。是否可以将公差设置为+/-而不是-@YohanRoth添加
方向class='nearest'
,因为默认值为backward谢谢,您能详细说明这段代码中发生了什么吗?我猜需要排序来加速连接?@YohanRoth排序是merge_asof必须的,你也可以检查我测试的链接,看起来公差只考虑在负方向上,就像它最多是左键一样,但公差量可以小于左键。是否可以将公差设置为+/-而不是-@YohanRoth添加direction='nearest'
,因为默认值为backward
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"