Python pandas如何高效实现小表与大表的关联及字段计算
Pandas按匹配键做列运算的更优实现
原始数据与需求
现有两个DataFrame:
import pandas as pd df_1 = pd.DataFrame({'id': [1,1,1,1,1,2,2,2,2,2], 'x': [0,1,2,3,4,5,6,7,8,9]}) df_2 = pd.DataFrame({'y': [10,100]}, index=[1,2])
需求为按id字段匹配,将df_1的x字段与df_2中对应id的y字段相乘,得到新列x_new。
原有merge写法可以得到正确结果,但会生成额外的临时合并表,存在不必要的内存开销,写法也不够简洁。
最优实现
直接使用Series.map()做值映射即可,无需做全表合并:
df_1['x_new'] = df_1['id'].map(df_2['y']) * df_1['x']
方案优势
- 无中间临时表生成,内存占用更低,数据量越大性能优势越明显
- 逻辑直观:直接按id匹配对应y值,和x做原生向量化乘法
- 代码更简洁,不需要额外做索引转换、数据对齐操作
运行结果和原有方案完全一致:
id x x_new 0 1 0 0 1 1 1 10 2 1 2 20 3 1 3 30 4 1 4 40 5 2 5 500 6 2 6 600 7 2 7 700 8 2 8 800 9 2 9 900
如果后续需要做多字段的匹配运算,也可以用df_1.join(df_2, on='id')先把y列关联到df_1上再做后续计算,但单字段乘法场景下map写法是效率最高的选择。
内容的提问来源于stack exchange,提问作者Serge Kashlik
相关产品推荐
相关产品推荐

