You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas多列DataFrame中为各列添加差值计算新列?

问题描述

现有如下结构的Pandas DataFrame:

dateCol.ACol.BCol.C...
2022111...
2023222...
2024333...

需要为每一列添加对应的差值计算列,最终效果如下:

dateCol.ADiff Col.ACol.BDiff Col.BCol.CDiff Col.C...
20221nan1nan1nan...
2023212121...
2024313131...

尝试了以下代码但未达到预期:

df = pd.read_excel('example.xlsx', header=0).set_index(['date'])

df.diff()

解决方案

你的代码仅计算了差值但未与原数据合并,且将date设为索引后会导致它不再作为普通列显示。可以通过以下步骤实现需求:

  1. 读取数据时保留date为普通列,避免设为索引;
  2. 对非date列计算差值,并给差值列命名为Diff 原列名;
  3. 将原数据与差值数据按原列+差值列的交替顺序合并。

完整代码示例

import pandas as pd

# 读取Excel文件,date作为普通列保留
df = pd.read_excel('example.xlsx', header=0)

# 计算所有非date列的差值,并重命名差值列
diff_columns = df.drop('date', axis=1).diff().rename(columns=lambda col_name: f'Diff {col_name}')

# 构建交替的列顺序:原列后紧跟对应差值列
ordered_columns = []
for col in df.drop('date', axis=1).columns:
    ordered_columns.append(col)
    ordered_columns.append(f'Diff {col}')

# 合并数据并按指定顺序排列列
final_df = pd.concat([df[['date']], df.drop('date', axis=1), diff_columns], axis=1)
final_df = final_df[['date'] + ordered_columns]

# 查看结果
print(final_df)

代码说明

  • df.drop('date', axis=1).diff():排除date列后,对剩余列计算当前行与前一行的差值,符合示例中的计算逻辑;
  • rename(columns=lambda col_name: f'Diff {col_name}'):给差值列添加统一前缀,方便区分原列与差值列;
  • 构建ordered_columns是为了保证原列和对应的差值列相邻,匹配你想要的输出结构;
  • pd.concat([...], axis=1):按列合并原数据和差值数据,最后通过列索引重新排序得到目标结构。

如果之前已将date设为索引,可先执行df.reset_index(inplace=True)将其转回普通列,再执行上述步骤。

内容的提问来源于stack exchange,提问作者SebastianHeeg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:39:23