python - 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()
这给了我一个熊猫系列,我想如果我愿意的话,我可以把它变成一个数据框,但是对于我感兴趣的所有其他列,我将如何做后者呢?
解决方案
尝试使用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
推荐阅读
- sql - 带有 = 的 Sql where 语句有效,但 LIKE 无效
- javascript - Android Studio(网页帮助)网络:ERR_FILE_NOT_FOUND
- javascript - 如何在 vue.js 中的路由之间传递道具?
- python - 运行服务器上的 Django E.408、E.409 和 E.410 错误
- javascript - 状态问题 - 正在工作,但现在返回一个难以理解的错误
- oracle - oracle数据库中的卷不保存用户信息
- jquery - AngularJS,区分拖动和点击事件,给点击事件传递数据
- html - 检测引导导航栏是否折叠或没有角度
- java - 在eclipse中创建类的问题
- javascript - EventListener 不能同等地捕捉按钮