如何遍历Pandas DataFrame列并与最后一列做差值计算?
解决方案
以下是实现需求的Pandas代码方案,包含完整步骤与注释:
import pandas as pd # 1. 构造示例DataFrame(实际场景替换为你读取的tab文件数据) data = { 'A': [1.2, 2.1, 3.0], 'B': [5.0, 3.0, 6.0], 'C': [2.4, 2.7, 2.9], 'test_data': [1.9, 2.6, 2.8] } df = pd.DataFrame(data, index=[1, 2, 3]) df.index.name = 'frequency' # 2. 获取除最后一列(test_data)外的所有目标列 target_cols = df.columns[:-1] # 3. 逐行计算差值:test_data对应值 - 其他列对应值 df[target_cols] = df['test_data'] - df[target_cols] # 4. 生成各列均值统计行 stats = {col: df[col].mean().round(3) for col in target_cols} stats_df = pd.DataFrame(stats, index=['average of column']) stats_df['test_data'] = None # 统计行的test_data列留空 # 5. 合并原数据与统计行 result_df = pd.concat([df, stats_df]) # 输出结果 print(result_df)
代码说明
- 列选择:用
df.columns[:-1]动态获取除最后一列外的所有列,避免硬编码列名,适配列数变化的场景。 - 差值计算:利用Pandas广播特性,直接用一维的
test_data列减去多列数据,自动完成逐行运算。 - 统计行生成:通过字典推导式计算各列均值(保留3位小数匹配示例),再转换为DataFrame,确保统计行格式与原数据一致。
- 合并数据:使用
pd.concat合并原数据与统计行,符合Pandas新版本规范(替代已弃用的append方法)。
扩展统计量
若需要添加标准差、最大值、最小值等,可修改统计量生成逻辑:
# 扩展统计量示例:均值、标准差、最大值、最小值 stats = { col: { 'average': df[col].mean().round(3), 'std': df[col].std().round(3), 'max': df[col].max().round(3), 'min': df[col].min().round(3) } for col in target_cols } stats_df = pd.DataFrame(stats).T.reset_index().rename(columns={'index': 'frequency'}).set_index('frequency') stats_df['test_data'] = None result_df = pd.concat([df, stats_df])
内容的提问来源于stack exchange,提问作者knoppers-agent
相关产品推荐
相关产品推荐

