Python中DataFrame多列与固定均值求差的非手动实现方法咨询
解决批量计算DataFrame列与固定列差值的问题
嘿,作为Python新手能主动把Excel操作迁移到Python里,这步走得很赞!针对你想批量计算A、B、C列和mean列差值的需求,我给你分享两个简单好用的方法,不用再手动逐个写列名啦:
方法一:用循环遍历列(新手友好,直观易懂)
这种方法逻辑直白,先列出要处理的目标列,再循环每个列生成对应的差值列,非常适合新手理解:
import pandas as pd # 先构造你的示例测试数据 data = { 'Unnamed:0': ['2020-08-28', '2020-08-29', '2020-08-30', '2020-08-31', '2020-09-01'], 'A': [1,2,3,4,5], 'B': [6,7,8,9,10], 'C': [11,12,13,14,15], 'mean': [6.0,7.0,8.0,9.0,10.0] } new_df = pd.DataFrame(data) # 定义需要处理的目标列列表 target_cols = ['A', 'B', 'C'] # 循环生成每一列的差值列 for col in target_cols: new_df[f'Mean diff{col}'] = new_df[col] - new_df['mean']
执行这段代码后,你的DataFrame会自动生成Mean diffA、Mean diffB、Mean diffC三列,完全不用手动逐个指定列名。
方法二:用Pandas广播机制(更简洁高效)
如果你想写得更优雅、处理大数据时更快,可以用Pandas的广播特性,一次性完成所有列的计算:
# 提取目标列,批量减去mean列(Pandas会自动按行广播运算) diff_columns = new_df[target_cols].sub(new_df['mean'], axis=0) # 给生成的差值列重命名 diff_columns.columns = [f'Mean diff{col}' for col in diff_columns.columns] # 把差值列合并回原DataFrame new_df = pd.concat([new_df, diff_columns], axis=1)
这种方法利用了Pandas的向量运算能力,比循环更高效,代码也更简洁,适合熟悉Pandas基本操作后使用。
执行后的结果示例
处理后的DataFrame会变成这样:
| Unnamed:0 | A | B | C | mean | Mean diffA | Mean diffB | Mean diffC |
|---|---|---|---|---|---|---|---|
| 2020-08-28 | 1 | 6 | 11 | 6.0 | -5.0 | 0.0 | 5.0 |
| 2020-08-29 | 2 | 7 | 12 | 7.0 | -5.0 | 0.0 | 5.0 |
| 2020-08-30 | 3 | 8 | 13 | 8.0 | -5.0 | 0.0 | 5.0 |
| 2020-08-31 | 4 | 9 | 14 | 9.0 | -5.0 | 0.0 | 5.0 |
| 2020-09-01 | 5 | 10 | 15 | 10.0 | -5.0 | 0.0 | 5.0 |
你可以根据自己的习惯选择方法,新手先从循环开始理解逻辑,熟悉后再尝试广播的方式哦~
内容的提问来源于stack exchange,提问作者SG93
相关产品推荐
相关产品推荐

