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

如何使用pandas计算分组内行差值并新增为DataFrame附加列

Pandas按id分组计算组内列差值并追加为新列

需求描述

需要对如下测试DataFrame按id列分组:

id  a  b  c
0   1  1  6  2
1   1  2  5  2
2   2  3  4  2
3   2  4  3  2
4   3  5  2  2
5   3  6  1  2

计算同一分组内a/b/c列的行之间的差值,将差值作为附加列添加到原DataFrame中,最终输出结构如下:

id  a  b  c  a_diff  b_diff  c_diff
0   1  1  6  2    -1.0     1.0     0.0
1   1  2  5  2     1.0    -1.0     0.0
2   2  3  4  2    -1.0     1.0     0.0
3   2  4  3  2     1.0    -1.0     0.0
4   3  5  2  2    -1.0     1.0     0.0
5   3  6  1  2     1.0    -1.0     0.0

本次使用的测试数据构造代码:

import pandas as pd
df = pd.DataFrame({'id': [1,1,2,2,3,3], 'a': [1,2,3,4,5,6],'b': [6,5,4,3,2,1], 'c': [2,2,2,2,2,2]})

实现代码

观察目标结果的差值规律:每个分组共2行,第一行差值为当前行减同组下一行,第二行差值为当前行减同组上一行,实现逻辑如下:

# 按id分组计算后行减前行的差值,列名追加_diff后缀
diff_cols = df.groupby('id')[['a', 'b', 'c']].diff().add_suffix('_diff')
# 填充每个分组首行的空值:取同组第二行差值的相反数
diff_cols = diff_cols.groupby(df['id']).apply(lambda group: group.fillna(-group.dropna().iloc[0])).reset_index(drop=True)
# 拼接原表和差值列得到最终结果
df_result = pd.concat([df, diff_cols], axis=1)

执行后打印df_result即可得到和要求完全一致的输出。如果分组内存在更多行,可根据实际差值计算规则调整填充逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:34:01