首页 > 解决方案 > 在熊猫数据框上应用 groupby 两次

问题描述

我在熊猫数据框中存储了一个巨大的 .csv 文件。表的结构是这样的

Category       Time      Col1
1              00:00      3
1              01:00      6
1              01:00      10
2              02:00      8
2              02:00      12
2              03:00      6
3              04:00      13
3              05:00      8

我想为每个类别找到以下内容

[summation(每个类别的每次col1的总和)*(每个类别中每次col1的计数)]/(总行数)每个类别。

所以基本上我试图在类别上应用一次分组,然后在每个类别中,我想在时间上再次应用分组并按上述计算。

所以对于上面的例子,我的输出应该是这样的

Category       Col1
1         [3 + (2 * (6 + 10))] / 8
2         [(2 * (8 + 12)) + 6] / 8
3         [13 + 8] / 8

标签: pythonpython-3.xpandaspandas-groupby

解决方案


使用transformwith sumcreate the count,然后我们使用Seriesgroupbyget 结果

s1=df.groupby(['ategory','Time']).Col1.transform('count')
(s1*df.Col1).groupby(df['ategory']).sum()/df.groupby('ategory').Col1.sum()
Out[631]: 
ategory
1    1.842105
2    1.769231
3    1.000000
Name: Col1, dtype: float64

推荐阅读