Pandas如何基于指定变量命名新列存储A与B的差值
Pandas按Value值分存A-B差值到对应列的实现方案
原有代码失效原因
你循环内筛选得到的df_red是原DataFrame的切片副本,对副本新增列的操作不会同步到原DataFrame,因此无法得到预期结果。
最优实现方案
方案1:向量化操作(性能最优,适合大数据量)
全程无循环,性能远高于逐值判断,自动适配Value列的所有唯一值,无需手动指定取值:
import pandas as pd # 读取数据 df = pd.read_excel(r'E:\...\.xlsx') # 计算所有行的A-B差值 diff = df['A'] - df['B'] # 生成Value对应的哑变量列,自动按Diff前缀命名,乘以差值得到对应结果 diff_cols = pd.get_dummies(df['Value'], prefix='Diff').multiply(diff, axis=0) # 合并到原DataFrame,不匹配的行自动填充0 df = pd.concat([df, diff_cols], axis=1)
方案2:优化版循环(可读性高,适合小数据量)
如果更习惯循环写法,可以直接在原DataFrame上操作,避免修改副本的问题,同样不需要硬编码每个Diff列:
import pandas as pd df = pd.read_excel(r'E:\...\.xlsx') # 遍历所有唯一的Value值 for v in df['Value'].unique(): df[f'Diff_{v}'] = (df['A'] - df['B']).where(df['Value'] == v, 0)
内容的提问来源于stack exchange,提问作者g123456k
相关产品推荐
相关产品推荐

