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

Python pandas:按DateTime排序后按Cod_atc分组累加计数的问题

问题分析与解决方案

你的代码存在两个核心问题:

  1. 排序未生效:df1.sort_values(by='DateTime')默认不会修改原DataFrame(inplace=False),执行后原df1的行顺序仍为初始状态,后续分组计数自然无法遵循DateTime顺序。
  2. 分组计数顺序错误:即使排序生效,groupby(['cod_atc'])默认会对分组键cod_atc进行排序,打乱分组内的行顺序,导致cumcount()基于打乱后的顺序计数,而非你需要的DateTime排序后的顺序。

修正后的代码

# 转换日期格式
df1['DateTime'] = pd.to_datetime(df1['local_date'])
# 按DateTime排序并直接修改原DataFrame
df1.sort_values(by='DateTime', inplace=True)
# 按cod_atc分组,保留当前排序后的行顺序,生成累加计数
df1['count'] = df1.groupby(['cod_atc'], sort=False).cumcount()

关键说明

  • 使用sort_values(..., inplace=True)让排序直接作用于原DataFrame,也可以赋值给新变量(如df_sorted = df1.sort_values(by='DateTime')),确保后续操作基于排序后的数据集。
  • groupby(..., sort=False)会保留分组前DataFrame的行顺序,这样每个cod_atc分组内的行就是按DateTime排序后的状态,cumcount()就能正确按时间顺序生成累加计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:25:26