pandas中groupby分组求和赋值新列时值未填充如何解决
问题根因
代码存在两处错误:
- 分组字段填错:需求要求按
CustomerID分组聚合,代码里实际传入的分组字段是SalesOrderID,分组维度从根源上不符合要求。 - 赋值逻辑不符合pandas索引对齐规则:
groupby().sum()返回的聚合结果,索引是分组字段的唯一值,总长度等于分组数量,远短于原数据集的行数。直接将这个结果赋值给原表新列时,pandas只会按索引值做精确匹配填充,绝大多数行因为索引匹配不上会被填充为空值,自然无法得到正确的逐行填充结果。
修正方案
如果需要保留原表逐行结构,给每一行匹配所属CustomerID对应的UnitPrice总和,要使用transform方法——该方法会将组内聚合结果按照原表行索引映射回每一行,返回值长度和原表完全一致:
data['TotalEN'] = round(data.groupby(['CustomerID'])['UnitPrice'].transform('sum'), 2)
如果你不需要保留原表逐行结构,只是想单独得到每个客户的总金额统计结果,直接将聚合结果赋值给独立变量即可,不要向原表传入长度不匹配的序列:
customer_sum_df = round(data.groupby(['CustomerID'])['UnitPrice'].sum(), 2)
内容的提问来源于stack exchange,提问作者P.Brito
相关产品推荐
相关产品推荐

