在pandas.groupby聚合后,如何快速保留原始数据实例?
Pandas GroupBy聚合后保留原始数据实例的最快方法
要达成你展示的需求——让每个原始数据行都对应其所在分组的聚合值,最快的方式是用pandas的transform方法,它专门用来生成和原DataFrame同长度的分组聚合结果,自动匹配对应分组的每一行,不用额外做合并操作。
示例代码
先构造你给出的示例数据:
import pandas as pd df = pd.DataFrame({ 'entries': ['entry1', 'entry2', 'entry3', 'entry4', 'entry5', 'entry6', 'entry7', 'entry8'], 'column': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], 'values': [1.5, 1.3, 0.6, 0.7, 0.5, 0.5, 1.3, 1.7] })
然后执行核心操作:
# 按column分组,计算values的均值,用transform映射到每一行 df['mean'] = df.groupby('column')['values'].transform('mean') # 格式化均值保留三位小数,和示例格式对齐 df['mean'] = df['mean'].round(3)
最终结果
执行后得到的DataFrame如下(注:你提供的示例中C组均值1.666是计算错误,实际0.5+1.3+1.7=3.5,除以3约为1.167):
entries column values mean 0 entry1 A 1.5 1.333 1 entry2 A 1.3 1.333 2 entry3 A 0.6 1.333 3 entry4 B 0.7 0.600 4 entry5 B 0.5 0.600 5 entry6 C 0.5 1.167 6 entry7 C 1.3 1.167 7 entry8 C 1.7 1.167
效率说明
对比先聚合再用merge合并回原数据的方式,transform直接在分组内部完成结果的广播映射,省去了合并步骤的额外开销,处理大数据集时效率优势会更明显。
内容的提问来源于stack exchange,提问作者James Arten
相关产品推荐
相关产品推荐

