首页 > 解决方案 > Python Pandas:分组按和平均,计数,中位数

问题描述

假设我有一个看起来像这样的数据框

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)

现在假设我想创建一个新的数据框,它需要平均时间和中位数,获取用户状态,并生成一个新列,计算用户出现在User列中的次数,即

d = {'User' : ['A', 'B', 'C'],
     'avg_time':[1.5,3,4],
     'median_time':[1.5,3,4],
     'state':['CA','ID','OR'],
     'user_count':[2,1,3]}

df_res = pd.DataFrame(data=d)

我知道我可以用这样的平均语句来做一个小组

df.groupby(['User'], as_index=False).mean().groupby('User')['time'].mean()

这给了我一个熊猫系列,我想如果我愿意的话,我可以把它变成一个数据框,但是对于我感兴趣的所有其他列,我将如何做后者呢?

标签: pythonpandas

解决方案


尝试使用pd.NamedAgg

df.groupby('User').agg(avg_time=('time','mean'),
                       mean_time=('time','median'),
                       state=('state','first'),
                       user_count=('time','count')).reset_index()

输出:

  User  avg_time  mean_time state  user_count
0    A       1.5        1.5    CA           2
1    B       3.0        3.0    ID           1
2    C       4.0        4.0    OR           3

推荐阅读