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

如何为Pandas DataFrame添加分组聚合求和列(解决NaN问题)

解决分组求和后添加到原DataFrame的NaN问题

我明白你遇到的问题了——直接把groupby的求和结果赋值给新列时,因为索引不匹配,导致所有值都变成了NaN。这是因为df.groupby('A')['C'].sum()返回的Series,它的索引是'A'列的唯一值(bar和foo),而原DataFrame的索引是0到7,两者无法对应上,所以就填充了NaN。

下面给你两种简单有效的解决方法:

方法一:使用transform方法(推荐)

transform方法会将分组计算的结果广播到原DataFrame的每一行,自动匹配对应的分组,完美解决索引不匹配的问题:

import pandas as pd
import numpy as np

# 初始化你的DataFrame
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'], 
                   'B' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'], 
                   'C' : [1,2,8,2,3,4,8,7], 
                   'D' : np.random.randn(8)})

# 使用transform添加分组求和列
df['Sum'] = df.groupby('A')['C'].transform('sum')

执行后你就能得到想要的结果:

A B C D Sum
0 foo one 1 1.701138 27
1 bar one 2 0.771723 8
2 foo two 8 0.624447 27
3 bar three 2 1.725457 8
4 foo two 3 0.742048 27
5 bar two 4 0.166653 8
6 foo one 8 -0.605956 27
7 foo three 7 0.160273 27

方法二:先计算求和结果再合并

如果你更习惯用合并的方式,也可以先把分组求和的结果转成带普通索引的DataFrame,再和原DataFrame合并:

# 计算分组求和并重置索引
sum_df = df.groupby('A')['C'].sum().reset_index(name='Sum')
# 合并到原DataFrame
df = df.merge(sum_df, on='A')

这种方法也能得到完全一样的正确结果,适合需要单独处理求和结果的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:24:25