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

如何在groupby().diff()的结果中保留分组变量

解决Pandas分组后保留分组列的问题

嘿,作为Pandas新手完全不用客气!我来帮你搞定这个分组计算差值后保留row列的问题,给你两种常用的解决方案:

方案1:直接生成包含分组列的差值结果

默认情况下,df.groupby('row').diff()会把row列设为索引,所以结果里看不到它作为普通列。你可以通过两种方式把它保留下来:

方法A:分组时指定as_index=False

这样分组列会一直作为普通列存在,不过要注意,diff()会对所有列计算差值,字符串类型的row列diff后会变成NaN,所以建议只对需要计算差值的列操作:

# 假设你的数据有row、col1、col2列,只对col1和col2计算差值
diff_df = df.groupby('row', as_index=False)[['col1', 'col2']].diff()

生成的diff_df里会保留row列,同时包含各数值列的差值。

方法B:先计算差值再重置索引

如果已经用了默认的分组方式(row成为索引),可以用reset_index()把索引变回普通列:

diff_df = df.groupby('row')[['col1', 'col2']].diff().reset_index()

这样row列就会重新出现在结果中。

方案2:将差值结果合并回原DataFrame

如果你想把差值和原始数据放在一起,用transform是最方便的——它会返回和原DataFrame长度一致的结果,直接赋值成新列即可:

# 给原df新增差值列
df['col1_diff'] = df.groupby('row')['col1'].transform(lambda x: x.diff())
df['col2_diff'] = df.groupby('row')['col2'].transform(lambda x: x.diff())

这样原df会保留所有原始列(包括row),同时新增各列的差值列。

如果已经单独计算了差值结果(没有row列),也可以用join合并(因为两者的索引是对齐的):

# 先计算差值,此时row是索引
diff_result = df.groupby('row')[['col1', 'col2']].diff()
# 合并回原df,给差值列加后缀区分
merged_df = df.join(diff_result, rsuffix='_diff')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:42:41