如何对pandas DataFrame多列批量执行数学运算并新增对应列存储结果
解决方案
你可以通过匹配列名前缀批量执行运算,再按规则重排列顺序即可,无需逐列手动编写代码,示例实现如下:
核心代码
import pandas as pd # 可自定义配置项 p_col_multi_coef = 2 # p开头列的乘系数,按需修改 fill_diff_na = True # diff计算后第一行的空值是否填充为0 fill_value = 0 # 批量生成计算结果列 for col in df.columns: # 处理p开头列,生成M+原列名的新列 if col.startswith("p"): df[f"M{col}"] = df[col] * p_col_multi_coef # 处理v开头列,生成D+原列名的新列 elif col.startswith("v"): diff_res = df[col].diff() df[f"D{col}"] = diff_res.fillna(fill_value) if fill_diff_na else diff_res # 自动重排列为 p1-Mp1-v1-Dv1-p2-Mp2-v2-Dv2... 的顺序 # 自动提取p列的最大序号,无需手动传入列数量 max_p_num = max(int(col[1:]) for col in df.columns if col.startswith("p")) sorted_cols = [] for num in range(1, max_p_num + 1): sorted_cols.extend([f"p{num}", f"Mp{num}", f"v{num}", f"Dv{num}"]) df = df.reindex(columns=sorted_cols)
拓展说明
如果后续需要修改运算规则,仅需调整对应分支的计算逻辑即可:
- 若p列需要做加法/除法/取对数等其他运算,替换
df[col] * p_col_multi_coef为对应运算代码 - 若v列需要做滚动求和/差分阶数调整等,替换
df[col].diff()为对应运算代码 - 新列命名规则可通过修改f-string的前缀自定义,比如把M改成Mul、D改成Diff都可直接调整
内容的提问来源于stack exchange,提问作者akshahi17
相关产品推荐
相关产品推荐

