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

Pandas如何按State分组将Score均值插入新增avg列

Pandas 分组匹配均值新增列高效实现

需求说明

  • 为Pandas DataFrame新增名为avg的列,列值为每行所属State分组对应的Score列平均值
  • 替代原有逐个筛选State子集、手动赋值、再拼接的低效实现

最优实现方案

直接使用groupby+transform,一行代码完成分组计算和值匹配,无需拆分拼接数据:

import pandas as pd
import numpy as np
 
# 构造测试数据
data = {'State':['CA', 'CA', 'CA', 'CA','CA', 'TX', 'TX', 'TX','TX', 'TX', 'FL', 'FL','FL', 'FL', 'FL', 'AZ','AZ','AZ', 'AZ', 'AZ'],
         'Score':[3,3,3,2,1,4,2,2,1,2,1,1,1,1,2,2,5,5,5,5],
        'Income':[32112,34214,45575,22106,32612,34216,47515,22906,32112,34511,45525,12106,52112,54214,45015,22986,32112,34214,47518,22175],
        }
df = pd.DataFrame(data)

# 直接生成avg列:按State分组计算Score均值,自动匹配到对应行
df['avg'] = df.groupby('State')['Score'].transform('mean')

# 导出csv文件
df.to_csv("analysis_output.csv", index=False)

实现原理

transform是Pandas分组对象的专用方法,会在完成分组聚合计算后,将每个分组的聚合结果广播到该分组下的所有行,最终返回长度和原DataFrame完全一致的序列,可直接赋值为新列,全程不会修改原表的行顺序、也不会产生索引错位问题。

已有分组聚合结果的适配方案

如果你已经提前计算好了分组均值序列(比如示例中的mean_score),可以用map方法按State值匹配对应均值,不需要重新计算:

# 预计算分组均值,返回Series的索引为State取值
mean_score = df.groupby('State')['Score'].mean()
# 按State列映射匹配对应均值
df['avg'] = df['State'].map(mean_score)

方案对比

  • groupby+transform写法最简洁,无需生成中间变量,适合单次计算直接赋值的场景
  • map匹配方案适合需要复用预计算分组聚合结果的场景,可减少重复计算
  • 两种方案的执行效率远高于手动拆分子集再拼接的实现,数据量越大、分组类别越多时性能优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:39:15