Pandas merge无匹配时用前向最近col1对应col2值填充实现方法
实现方案
你可以使用pandas内置的merge_asof方法完成这种分组有序近似匹配,具体操作如下:
- 先对两个DataFrame按关联键排序,
merge_asof要求用于匹配的数值列必须为升序排列:
# 按key分组、col1升序排序 DF1 = DF1.sort_values(by=['key', 'col1']).reset_index(drop=True) DF2 = DF2.sort_values(by=['key', 'col1']).reset_index(drop=True)
- 调用
merge_asof执行匹配,默认的direction='backward'参数刚好对应“取小于等于当前值的最近记录”的需求:
result = pd.merge_asof( left=DF2, # 保留DF2的所有行 right=DF1, by='key', # 先按key字段分组 on='col1' # 组内按col1做近似匹配 )
效果验证
你可以用以下测试代码验证结果:
import pandas as pd # 构造测试数据 DF1 = pd.DataFrame({ 'key': [1,1,1], 'col1': [13,15,18], 'col2': ['a','b','c'] }) DF2 = pd.DataFrame({ 'key': [1,1,1], 'col1': [14,15,19] }) # 排序+匹配 DF1 = DF1.sort_values(['key','col1']) DF2 = DF2.sort_values(['key','col1']) result = pd.merge_asof(DF2, DF1, by='key', on='col1') print(result)
输出结果完全符合预期:
key col1 col2 0 1 14 a 1 1 15 b 2 1 19 c
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

