You need to enable JavaScript to run this app. Python Pandas groupby如何计算均值、中位数、计数并提取对应state字段
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas groupby如何计算均值、中位数、计数并提取对应state字段

Pandas按User分组聚合多指标的实现方案

你可以直接用groupby对象的agg()方法实现多列多指标的同时聚合,还能自定义输出的列名,无需多次分组拼接。

示例运行代码

首先导入依赖、构造原始DataFrame:

import pandas as pd
d = {'User' : ['A', 'A', 'B', 'C', 'C', 'C'],
     'time':[1,2,3,4,4,4],
     'state':['CA', 'CA', 'ID', 'OR','OR','OR']}
df = pd.DataFrame(data = d)

写法1(Pandas 0.25+ 推荐,逻辑更清晰)

直接通过命名聚合的方式指定结果列名、对应聚合的原列和聚合函数:

df_res = df.groupby('User', as_index=False).agg(
    avg_time=('time', 'mean'),
    median_time=('time', 'median'),
    state=('state', 'first'),
    user_count=('User', 'size')
)

运行后输出的df_res完全符合你给出的预期结构。

写法2(兼容旧版本Pandas)

如果使用的Pandas版本低于0.25,不支持命名聚合,可以先通过字典指定聚合规则,再重命名列:

# 按规则聚合
agg_df = df.groupby('User', as_index=False).agg({
    'time': ['mean', 'median'],
    'state': 'first',
    'User': 'size'
})
# 合并多层列索引并重命名为目标列名
agg_df.columns = ['User', 'avg_time', 'median_time', 'state', 'user_count']
df_res = agg_df

规则说明

  • groupby('User', as_index=False):指定按User列分组,同时保留User为普通列而非行索引,符合输出的结构要求
  • 同一列可以指定多个聚合函数,比如示例中time列同时计算均值和中位数
  • 同一个用户的state值完全一致,所以用first/last/max/min等聚合函数效果相同,按需选择即可
  • size聚合函数会统计每个分组的行数,也就是每个User的出现次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:33:03