假设我有一个看起来像这样的数据框
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)
Run Code Online (Sandbox Code Playgroud)
现在假设我想创建新的数据帧,它采用时间的平均值和中位数,获取用户状态,并生成一个新列来计算用户出现在该列中的次数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)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过这样的平均陈述来建立一个小组
df.groupby(['User'], as_index=False).mean().groupby('User')['time'].mean()
Run Code Online (Sandbox Code Playgroud)
这给了我一个 pandas 系列,我想如果我愿意的话我可以将其制作成一个数据框,但是我将如何为我感兴趣的所有其他列做上面的后者呢?
尝试使用pd.NamedAgg:
df.groupby('User').agg(avg_time=('time','mean'),
mean_time=('time','median'),
state=('state','first'),
user_count=('time','count')).reset_index()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5319 次 |
| 最近记录: |