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

如何使用Pandas计算分组后当前行VALUE与上一行的差值

Pandas:按NAME分组计算VALUE列的行间差值

嘿,这个需求用Pandas的分组和差值方法就能轻松搞定,我给你一步步演示怎么做:

完整实现代码

首先咱们先把数据初始化好,然后新增DIFF列:

import pandas as pd

# 创建原始DataFrame
data = [['AAA','2019-01-01', 10], ['AAA','2019-01-02', 21], ['AAA','2019-02-01', 30], ['AAA','2019-02-02', 45], 
        ['BBB','2019-01-01', 50], ['BBB','2019-01-02', 60], ['BBB','2019-02-01', 70],['BBB','2019-02-02', 80]]
dfx = pd.DataFrame(data, columns = ['NAME', 'TIMESTAMP','VALUE'])

# 核心:按NAME分组后计算VALUE的行间差值
dfx['DIFF'] = dfx.groupby('NAME')['VALUE'].diff()

# 可选:将NaN替换为空字符串,匹配你期望的输出格式
dfx['DIFF'] = dfx['DIFF'].fillna('')

# 查看结果
print(dfx)

代码解释

  • 分组操作:dfx.groupby('NAME')['VALUE'] 先按NAME把数据分成AAA和BBB两个独立的组,只对每组内的VALUE列进行计算
  • 行差计算:.diff() 方法会自动计算当前行和同组上一行的VALUE差值,每个分组的第一行因为没有前一行,所以返回NaN
  • 格式调整:用fillna('')把NaN换成空字符串,就和你想要的输出完全一致了(如果不需要空字符串,直接保留NaN也可以)

最终输出

运行上面的代码后,得到的结果如下:

NAME   TIMESTAMP  VALUE DIFF
0  AAA  2019-01-01     10     
1  AAA  2019-01-02     21   11
2  AAA  2019-02-01     30    9
3  AAA  2019-02-02     45   15
4  BBB  2019-01-01     50     
5  BBB  2019-01-02     60   10
6  BBB  2019-02-01     70   10
7  BBB  2019-02-02     80   10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:56