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

为什么pandas.groupby执行apply操作后会保留分组键列?

原因说明

你在groupby().apply()的传入函数中,仅将date列设置为子DataFrame的索引,id列始终作为普通数值列保留在子表中。diff()方法默认会对表中所有数值类型的列执行逐行差分计算,因此最终结果不仅保留了id列,还计算出了同组内相邻行id的差分值——同组id值完全相同,所以差分值为0.0。

本质是groupby.apply()在拆分分组时,会把原表所有列都传入每个分组对应的子DataFrame,你没有在函数内主动移除id列,它自然会参与后续计算并出现在结果里。

实现预期结果的方法
  • 方法1(性能更优的写法,也是你自己验证通过的逻辑):先设置多层索引再分组差分,避免apply的额外循环开销,代码如下:
t.set_index(['id', 'date']).groupby(level=0).diff()
  • 方法2:如果要在apply逻辑内完成计算,只需要在设置索引后主动移除id列即可,代码如下:
t.groupby('id').apply(lambda df: df.set_index('date').drop(columns=['id']).diff())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.21 16:16:02