如何在Pandas DataFrame中按两列分组计算均值并生成新列?
Pandas按多列分组计算均值并添加新列
核心解决方案
要实现按两列分组计算第三列的均值并添加为新列,使用groupby结合transform方法是最直接的方式——transform会将分组聚合后的均值广播到原DataFrame的每一行,完美匹配索引。
示例实现
首先定义示例DataFrame:
import pandas as pd data = [ {'x':0.0, 'y':0.0, 'z':0.8}, {'x':0.0, 'y':0.0, 'z':1.0}, {'x':0.0, 'y':0.0, 'z':1.2}, {'x':1.0, 'y':1.0, 'z':1.6}, {'x':1.0, 'y':1.0, 'z':2.0}, {'x':1.0, 'y':1.0, 'z':2.4}, ] df = pd.DataFrame(data)
执行分组计算并添加新列:
# 按x、y分组,计算z列的均值,存入z_mean新列 df['z_mean'] = df.groupby(['x', 'y'])['z'].transform('mean')
输出结果
运行后得到的DataFrame如下:
x y z z_mean 0 0.0 0.0 0.8 1.0 1 0.0 0.0 1.0 1.0 2 0.0 0.0 1.2 1.0 3 1.0 1.0 1.6 2.0 4 1.0 1.0 2.0 2.0 5 1.0 1.0 2.4 2.0
关键说明
groupby(['x', 'y']):指定分组依据为x和y两列,确保相同x、y组合的行被归为同一组transform('mean'):对每个组的z列计算均值,与直接使用mean()不同,transform会保留原DataFrame的行数,将均值填充到对应组的每一行中- 直接赋值给
df['z_mean']即可完成新列的创建
内容的提问来源于stack exchange,提问作者Xavier M
相关产品推荐
相关产品推荐

