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

Pandas分组聚合值添加新列时出现NaN问题求助

问题分析与解决

错误原因

你执行的代码中,df.groupby('prod')['quant'].sum()返回的是一个以prod的唯一值('A'、'B')作为索引的Series,而原DataFrame的索引是0-4的整数,两者索引不匹配,直接赋值时无法将分组求和结果对应到原DataFrame的每一行,因此新列added_gr全为NaN。

正确解法

方法一:使用transform(推荐)

transform方法会对每个分组执行聚合操作,并将结果广播到该分组的所有行,返回与原DataFrame长度一致的结果,自动匹配索引:

import pandas as pd

df = pd.DataFrame({'prod':['A','A','A','B','B'],'quant':[2,3,4,3,1]})
df['added_gr'] = df.groupby('prod')['quant'].transform('sum')
print(df)

执行后得到的结果就是你期望的:

prod  quant  added_gr
0    A      2         9
1    A      3         9
2    A      4         9
3    B      3         4
4    B      1         4

方法二:分组求和后合并

先单独计算分组求和结果,再通过merge将结果合并到原DataFrame:

import pandas as pd

df = pd.DataFrame({'prod':['A','A','A','B','B'],'quant':[2,3,4,3,1]})
# 计算分组求和并重置索引为普通列
sum_result = df.groupby('prod')['quant'].sum().reset_index(name='added_gr')
# 左合并原DataFrame
df = df.merge(sum_result, on='prod', how='left')
print(df)

这种方法更直观,适合需要先查看分组结果的场景,最终效果和方法一一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:41:04