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

为何DataFrame.cumsum支持列表/字符串,GroupBy.cumsum却不支持?

GroupBy.cumsum 无法处理列表/字符串列的原因

先给出测试用的DataFrame定义:

import pandas as pd

df = pd.DataFrame({
    "group": [1, 1, 2, 2, 2],
    "list": [[1], [2], [1], [2], [3]],
    "string": ["a", "b", "a", "b", "c"]
})

单独调用df.cumsum()可以正常执行,结果如下:

group             list string
0      1              [1]      a
1      2           [1, 2]     ab
2      4        [1, 2, 1]    aba
3      6     [1, 2, 1, 2]   abab
4      8  [1, 2, 1, 2, 3]  ababc

但执行df.groupby("group").cumsum()时会返回空DataFrame,同时抛出FutureWarning:

Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4]

核心原因:

  • 两类cumsum的实现逻辑差异:
    DataFrame.cumsum是逐列独立处理,对于字符串、列表这类非数值类型,它并没有依赖numpy.cumsum(numpy本身不支持列表的累加),而是利用Python原生的+运算符特性,单独实现了字符串拼接、列表元素追加的累加逻辑。
  • GroupBy.cumsum的设计定位:
    GroupBy.cumsum的Cython化实现是专门针对数值类型做性能优化的,它在执行时会自动筛选出数值型列进行计算,直接排除字符串、列表这类object类型列——因为分组累加的核心应用场景是数值累计求和,pandas的GroupBy系列方法在设计时就优先保障数值类型的处理效率,对非数值类型的支持被刻意限制。
  • 空DataFrame与警告的由来:
    当前版本的pandas已经默认跳过非数值列的处理,所以返回空DataFrame;FutureWarning则是明确提示,未来版本会彻底移除对非数值列的尝试性处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:20:44