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

Pandas实现按日期-类别统计唯一Stock数并按Category跨日期累加的问题求助

解决Pandas分组后跨日期累计求和的问题

你的问题出在第二次分组的维度选错啦!咱们一步步来梳理清楚:

问题分析

你原来的代码里,第二次groupby(level=0)是按Date(分组索引的第0层)来分组做cumsum,这会把同一日期下的所有Category数据合并在一起累计,所以同一日期里每个分类的CUMSUM值都相同,完全不符合你要每个分类独立累计的需求。

正确解决方案

我们需要先统计每天每个分类的唯一股票数,再针对每个分类,按日期顺序做累计求和:

步骤1:统计每日各分类的唯一股票数

先按Date和Category分组,用nunique()统计每组的唯一Stock数量:

daily_unique = df.groupby(['Date', 'Category'])['Stock'].nunique().reset_index(name='daily_count')

这一步会得到如下中间结果:

DateCategorydaily_count
2020-01-0112
2020-01-0121
2020-01-0211
2020-01-0221

步骤2:按分类做跨日期累计求和

接下来按Category分组,对daily_count列做cumsum,这样每个分类会独立累计每天的数值:

daily_unique['CUMSUM'] = daily_unique.groupby('Category')['daily_count'].cumsum()

合并成链式操作(可选)

如果你喜欢简洁的写法,也可以把两步合并成一行:

result = (df.groupby(['Date', 'Category'])['Stock']
          .nunique()
          .reset_index(name='daily_count')
          .assign(CUMSUM=lambda x: x.groupby('Category')['daily_count'].cumsum())
          .drop('daily_count', axis=1))

最终结果

运行后你就能得到期望的输出:

DateCategoryCUMSUM
2020-01-0112
2020-01-0121
2020-01-0213
2020-01-0222

这样就完美实现了你要的:每个分类从最早日期开始,累计每天新增的唯一股票数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:19:05