基于table1动态条件为table2新增列生成table3的实现方法咨询
你要实现的匹配规则是:对table2每行的c值,取table1中所有a <= c的记录里最大的a对应的b值,作为新增的e字段,该规则天然适配table1的行数、a/b取值动态变更,不需要硬编码阈值。以下是不同技术栈的实现方案:
SQL实现
直接用关联子查询即可,不需要修改SQL语句即可适配table1的所有动态变更:
SELECT t2.c, t2.d, (SELECT b FROM table1 t1 WHERE t1.a <= t2.c ORDER BY t1.a DESC LIMIT 1) AS e FROM table2 t2 ORDER BY t2.c;
Python Pandas实现
用Pandas内置的merge_asof区间匹配方法,性能远高于循环判断,同样支持table1动态变更:
import pandas as pd # 此处替换为你自己的表读取逻辑,比如pd.read_sql、pd.read_csv等 table1 = pd.DataFrame({'a': [0,5,10,20], 'b': [1,2,3,4]}) table2 = pd.DataFrame({'c': [2,3,5,7,11,13,17,19,23], 'd': [100,101,102,103,104,105,106,107,108]}) # merge_asof要求匹配键有序,必须先排序 table1 = table1.sort_values('a') table2 = table2.sort_values('c') # 执行区间匹配 table3 = pd.merge_asof(table2, table1, left_on='c', right_on='a') # 调整字段得到最终结果 table3 = table3.rename(columns={'b': 'e'}).drop('a', axis=1)
内容的提问来源于stack exchange,提问作者Evan Kim
相关产品推荐
相关产品推荐

