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

如何为分组后的Pandas DataFrame添加单个计数列并保留数值列均值

为分组均值结果添加单独计数列(避免冗余列)

需求是对DataFrame分组计算均值后,添加单独的count列记录每组样本量,同时不能使用.agg(["count","mean"])——因为该方法会为每个数值列生成对应的count和mean列,导致DataFrame过于庞大,不利于后续散点图绘制。

解决方案

先计算分组均值,再单独合并每组的样本计数:

  1. 用groupby.mean()得到各数值列的分组均值
  2. 用groupby.size()获取每组的样本数量,作为新的count列合并到结果中
  3. 可选:调整列顺序,将count列前置,方便后续绘图使用

完整代码示例

import pandas as pd

df = pd.DataFrame(
  {
    'store':['store_a', 'store_a', 'store_b', 'store_b', 'store_b', 'store_c',],
    'location':['North America', 'North America', 'Europe', 'Europe', 'Europe', 'Europe'],
    'sales':[10, 5, 20, 20, 20, 10],
    'cost':[5, 4, 10, 14, 14, 8],
  }
)

# 计算分组均值
df_grouped = df.groupby(["store", "location"]).mean()
# 添加count列,利用size()获取每组样本数
df_grouped['count'] = df.groupby(["store", "location"]).size()
# 调整列顺序,将count放在最前面
df_grouped = df_grouped.reindex(columns=['count', 'sales', 'cost'])

print(df_grouped)

输出结果

count  sales       cost
store    location                           
store_a  North America     2    7.5   4.500000
store_b  Europe            3   20.0  12.666667
store_c  Europe            1   10.0   8.000000

简化写法(用assign一步完成)

如果想更简洁,可以用assign方法直接在均值结果后添加count列:

df_grouped = df.groupby(["store", "location"]).mean().assign(
    count=lambda _: df.groupby(["store", "location"]).size()
).reindex(columns=['count', 'sales', 'cost'])

这种方法只会生成一个count列,完全符合需求,不会产生冗余数据,非常适合后续散点图绘制(比如用count控制点的大小)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:35:22