Pythonic的pandas原生方式为DataFrame批量添加多组差值计算列?
优化后的Pythonic pandas实现
最简洁的pandas原生写法完全可以避免显式for循环,利用pandas向量化运算特性一行代码实现需求:
df_out = df_out.join((df_out[all_pos] - mean_df[all_pos]).add_prefix('delta_'))
原理解释
- 因为
df_out和mean_df的索引、对应列完全对齐,直接对选中的all_pos列做减法,会得到一个列名和all_pos完全一致的差值DataFrame - 调用
add_prefix('delta_')方法可以批量给所有差值列添加前缀,直接生成delta_NN、delta_VB、delta_ADJ的目标列名 - 最后通过
join方法把差值列合并回原df_out即可
可选原地赋值写法
如果你需要直接修改原df_out而不是生成新对象,也可以用下面的写法:
df_out[[f'delta_{col}' for col in all_pos]] = df_out[all_pos] - mean_df[all_pos]
相比原循环写法的优势
- 完全基于pandas原生向量化运算,避免Python层面的循环,执行效率远高于逐列循环,数据量越大性能优势越明显
- 代码更简洁连贯,符合Pythonic的风格,可读性更高
- 不需要手动逐列拼接列名赋值,减少出错概率
内容的提问来源于stack exchange,提问作者mrdatascience32
相关产品推荐
相关产品推荐

