python - 使用 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)
完成任务?
谢谢
解决方案
这是一种方法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"
推荐阅读
- excel - Excel 图表只有 x 轴和空白点之间的空间
- testing - 在 WebStorm 中运行 TestCafe 需要什么配置
- google-analytics - 添加维度过滤器时,未返回任何结果(Python - API)
- javascript - Edit user laravel using Vue
- android - Android 视图的复杂弯曲背景
- angular - Angular&rxjs:自动完成竞争条件问题
- java - 模拟 int 数据类型的 @value 注释
- hive - 使用 Struct 字段将 Qubole Hive 表同步到 Snowflake
- amazon-web-services - 成功部署后未部署 AWS C# Lambda 函数代码
- typescript - 如何在 vanilla Typescript Nativescript 中创建共享服务(作为 Angular 服务)