我有这些数据:
ID TIME
1 2
1 4
1 2
2 3
Run Code Online (Sandbox Code Playgroud)
我想将数据分组ID并计算每组的平均时间和大小.
ID MEAN_TIME COUNT
1 2.67 3
2 3.00 1
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,则会收到错误"ValueError:无法插入ID,已存在":
result = df.groupby(['ID']).agg({'TIME': 'mean', 'ID': 'count'}).reset_index()
Run Code Online (Sandbox Code Playgroud)
jez*_*ael 26
使用drop=True不创建新列的参数index但将其删除:
result = df.groupby(['ID']).agg({'TIME': 'mean', 'ID': 'count'}).reset_index(drop=True)
print (result)
ID TIME
0 3 2.666667
1 1 3.000000
Run Code Online (Sandbox Code Playgroud)
但是如果需要索引中的新列rename首先需要旧列名:
result = df.groupby(['ID']).agg({'TIME': 'mean', 'ID': 'count'})
.rename(columns={'ID':'COUNT','TIME':'MEAN_TIME'})
.reset_index()
print (result)
ID COUNT MEAN_TIME
0 1 3 2.666667
1 2 1 3.000000
Run Code Online (Sandbox Code Playgroud)
解决方案如果需要通过多列进行聚合:
result = df.groupby(['ID']).agg({'TIME':{'MEAN_TIME': 'mean'}, 'ID': {'COUNT': 'count'}})
result.columns = result.columns.droplevel(0)
print (result.reset_index())
ID COUNT MEAN_TIME
0 1 3 2.666667
1 2 1 3.000000
Run Code Online (Sandbox Code Playgroud)
我将仅限groupby于该TIME专栏。
df.groupby(['ID']).TIME.agg({'MEAN_TIME': 'mean', 'COUNT': 'count'}).reset_index()
ID MEAN_TIME COUNT
0 1 2.666667 3
1 2 3.000000 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14151 次 |
| 最近记录: |