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

使用Python动态计算分组数据集的各列平均值

问题:按Objects分组计算各列平均值生成汇总表

我有一个行数数千但列数较少的大型数据集,已按Objects字段排序分组,数据集如下:

# Table1
import pandas as pd

data = [['ALFA', 351740.00, 0.31, 0.22, 0.44, 0.19, 0.05], 
        ['ALFA', 401740.00, 0.43, 0.26, 0.23, 0.16, 0.09], 
        ['ALFA', 892350.00, 0.58, 0.24, 0.05, 0.07, 0.4], 
        ['Bravo', 511830.00, 0.52, 0.16, 0.08, 0.26, 0], 
        ['Charlie', 590030.00, 0.75, 0.2, 0.14, 0.37, 0.06], 
        ['Charlie', 590030.00, 0.75, 0.2, 0.27, 0.2, 0.01], 
        ['Charlie', 590030.00, 0.75, 0.2, 0.29, 0.11, 0.04], 
        ['Charlie', 590030.00, 0.75, 0.2, 0.27, 0.2, 0.01], 
        ['Charlie', 401740.00, 0.43, 0.26, 0.14, 0.37, 0.06], 
        ['Charlie', 511830.00, 0.52, 0.16, 0.13, 0.22, 0.01], 
        ['Delta', 590030.00, 0.75, 0.2, 0.34, 0.3, 0], 
        ['Delta', 590030.00, 0.75, 0.2, 0, 0.28, 0], 
        ['Delta', 351740.00, 0.31, 0.22, 0.44, 0.19, 0.05], 
        ['Echo', 892350.00, 0.58, 0.24, 0.23, 0.16, 0.09], 
        ['Echo', 590030.00, 0.75, 0.2, 0.05, 0.07, 0.4], 
        ['Echo', 590030.00, 0.75, 0.2, 0.08, 0.26, 0], 
        ['Echo', 590030.00, 0.75, 0.2, 0.14, 0.37, 0.06], 
        ['Foxtrot', 401740.00, 0.43, 0.26, 0.27, 0.2, 0.01], 
        ['Foxtrot', 511830.00, 0.52, 0.16, 0.29, 0.11, 0.04], 
        ['Golf', 590030.00, 0.75, 0.2, 0.27, 0.2, 0.01], 
        ['Golf', 590030.00, 0.75, 0.2, 0.14, 0.37, 0.06], 
        ['Golf', 351740.00, 0.31, 0.22, 0.13, 0.22, 0.01], 
        ['Hotel', 892350.00, 0.58, 0.24, 0.34, 0.3, 0], 
        ['Hotel', 590030.00, 0.75, 0.2, 0, 0.28, 0], 
        ['Hotel', 590030.00, 0.75, 0.2, 0.29, 0.11, 0.04]]

df = pd.DataFrame(data, columns=['Objects', 'Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6'])

需要按Objects字段分区,计算所有列的平均值,生成如下独立汇总表:

# Table2
data2 = [['ALFA', 548610.00, 0.44, 0.24, 0.24, 0.14, 0.18], 
        ['Bravo', 511830.00, 0.52, 0.16, 0.08, 0.26, 0], 
        ['Charlie', 545615.00, 0.66, 0.20, 0.21, 0.25, 0.03], 
        ['Delta', 510600.00, 0.60, 0.21, 0.26, 0.26, 0.02], 
        ['Echo', 665610.00, 0.71, 0.21, 0.13, 0.22, 0.14], 
        ['Foxtrot', 456785.00, 0.48, 0.21, 0.28, 0.16, 0.03], 
        ['Golf', 510600.00, 0.60, 0.21, 0.18, 0.26, 0.03], 
        ['Hotel', 690803.33, 0.69, 0.21, 0.21, 0.23, 0.01]]

df2 = pd.DataFrame(data2, columns=['Objects', 'Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6'])

要求代码能自动适配数量不固定的Objects,自动统计每个Objects的行数并计算各列平均值。


解决方案

使用pandas的groupby方法按Objects分组,然后调用mean()计算各列平均值,最后按需调整小数精度即可:

import pandas as pd

# 读取原始数据集
data = [['ALFA', 351740.00, 0.31, 0.22, 0.44, 0.19, 0.05], 
        # 省略其余数据行
        ['Hotel', 590030.00, 0.75, 0.2, 0.29, 0.11, 0.04]]

df = pd.DataFrame(data, columns=['Objects', 'Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6'])

# 按Objects分组计算平均值,重置索引使Objects成为普通列
df_summary = df.groupby('Objects').mean().reset_index()

# 调整各列的小数精度,匹配示例结果
df_summary['Column1'] = df_summary['Column1'].round(2)
df_summary[['Column2', 'Column3', 'Column4', 'Column5']] = df_summary[['Column2', 'Column3', 'Column4', 'Column5']].round(2)
df_summary['Column6'] = df_summary['Column6'].round(2)

# 查看结果
print(df_summary)

代码说明

  • groupby('Objects').mean():自动按Objects分组,对每组的所有数值列计算平均值,无需手动统计行数(pandas会自动处理)。
  • reset_index():将分组的Objects从索引转为普通列,符合示例表的结构。
  • round()方法:根据示例结果调整各列的小数位数,确保输出格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:15:37