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

在Pandas中按名称分组,生成多列累计和列的实现问题

分组计算累计和生成新列的解决方案

你的需求是按列a分组,计算b和c的累计和得到新列d,但原代码使用sum()导致了NaN,原因是:

  • groupby('a')['b','c'].sum()计算的是每个分组内b和c的总和,返回的结果只有每个分组一行数据,和原DataFrame的索引不匹配,赋值后自然出现NaN。
  • 你需要的是逐行累计求和,而不是分组总和。

正确实现代码

可以先计算每行b与c的和,再按a分组做累计求和:

import pandas as pd

# 构造你的数据集
df = pd.DataFrame({
    'a': ['Joe', 'Joe', 'Joe', 'Adam', 'Adam', 'Adam'],
    'b': [1, 1, 0, 1, 0, 0],
    'c': [0, 0, 1, 0, 1, 0]
})

# 生成d列:先求每行b+c,再分组累计求和
df['d'] = (df['b'] + df['c']).groupby(df['a']).cumsum()

运行结果

a  b  c  d
0  Joe  1  0  1
1  Joe  1  0  2
2  Joe  0  1  3
3  Adam 1  0  1
4  Adam 0  1  2
5  Adam 0  0  2

补充说明

另一种等价写法,用apply实现:

df['d'] = df.groupby('a').apply(lambda group: (group['b'] + group['c']).cumsum()).droplevel(0)

两种写法都能得到你想要的结果,第一种更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:13