Pandas如何根据a、b列表批量匹配DataFrame对应c列值 无需循环
解决方案
你可以通过pandas原生向量化操作实现批量匹配,全程无循环,性能远高于手动遍历,两种常用高效方案如下:
方案1:MultiIndex映射(推荐,性能最优)
将原DataFrame的a、b两列设为复合索引,直接构建(a,b)组合到c值的映射关系,之后批量传入查询的键值对即可拿到结果:
import pandas as pd # 假设你的原DataFrame名为df # 1. 构建映射关系 c_map = df.set_index(['a', 'b'])['c'] # 2. 传入你的查询列表 a_query = [100.0, 600.0, 200.0] b_query = [0.0, 5.0, 1.0] # 3. 批量查询获取结果 c_result = c_map.reindex(zip(a_query, b_query)).tolist()
执行后c_result的值就是你期望的[0.0, -0.5, 0.0],如果遇到不存在的(a,b)组合会返回NaN。如果原数据存在重复的(a,b)组合,提前执行df = df.drop_duplicates(subset=['a', 'b'], keep='first')去重即可。
方案2:Merge关联(适合查询列表长度很大的场景)
如果你的查询列表长度和原DataFrame量级接近,用左连接的方式实现匹配效率更高:
# 1. 把查询列表转为DataFrame query_df = pd.DataFrame({'a': a_query, 'b': b_query}) # 2. 按a、b两字段左连接匹配c值 res_df = query_df.merge(df[['a', 'b', 'c']], on=['a', 'b'], how='left') # 3. 提取结果列表 c_result = res_df['c'].tolist()
内容的提问来源于stack exchange,提问作者narutoArea51
相关产品推荐
相关产品推荐

