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

如何基于时间索引对Pandas DataFrame进行行减法运算?

问题与解决方案

问题说明

原始DataFrame:

time    code    amount
2023-01 A       100000
2023-01 B       200000
2023-02 A       150000
2023-02 B       100000

需求:按code分组,计算后一期(2023-02)amount减去前一期(2023-01)amount的结果,输出格式如下:

code    amount
A       50000
B       -100000

解决方案

方法一:分组计算相邻差值(通用多期场景)

适合时间序列包含多个连续期数的情况,自动计算每组内相邻时间的amount差值:

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'time': ['2023-01', '2023-01', '2023-02', '2023-02'],
    'code': ['A', 'B', 'A', 'B'],
    'amount': [100000, 200000, 150000, 100000]
})

# 按code分组,计算amount的相邻差值,过滤空值后整理格式
result = df.groupby('code')['amount'].diff().dropna()
result = result.reset_index(drop=True).to_frame(name='amount')
result.insert(0, 'code', df['code'].unique())

print(result)

方法二:宽表转换后直接相减(明确两期场景)

如果仅需计算指定两个时间点的差值,可将数据转为宽表后直接做减法:

import pandas as pd

df = pd.DataFrame({
    'time': ['2023-01', '2023-01', '2023-02', '2023-02'],
    'code': ['A', 'B', 'A', 'B'],
    'amount': [100000, 200000, 150000, 100000]
})

# 转换为宽表:code为行索引,time为列,值为amount
wide_df = df.pivot(index='code', columns='time', values='amount')
# 计算2023-02与2023-01的差值,再转为目标格式
result = (wide_df['2023-02'] - wide_df['2023-01']).reset_index(name='amount')

print(result)

两种方法都能得到目标结果,可根据实际数据场景选择。

内容的提问来源于stack exchange,提问作者Quang Minh Vu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:03