在Python中计算Dataframe的分组元素

时间:2016-07-21 04:31:48

标签: python

我有一个数据帧,我正在尝试分组和总结。我能够做到这一点,但我也想按元素分组。

sessions_summed = df.groupby("screens_completed").sum()
print sessions_summed

使用这个,我得到这个输出:

screens_completed     sessions         
0                         6
1                         1
2                         3
3                         1
4                         1
5                         1
9                        33
12                        8
13                      872
14                   103292

我想要的是看到屏幕上每个实体完成的次数(即14次出现的次数)与这个新的总结会话列一起出现。然后我想将总和列除以计数列。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用DataFrame.pivot_table计算特定值在列中显示的次数。

您可以利用aggfunc函数中的pivot_table参数。

sessions_summed = df.groupby("screens_completed").sum()

#the below line will count the number of times each value occurs in screens_completed.
sessions_summed["count"] = df.pivot_table(index="screens_completed", values="sessions", aggfunc=len)
sessions_summed["mean"] = sessions_summed["sessions"] / sessions_summed["count"]

那么这里发生了什么?

pivot_table会根据您使用index参数指定的列对行进行分组。对于传递'values'参数的每个列,pivot_table将尝试使用与具有匹配索引值的行对应的行中的所有值来计算要放入该列的一些汇总信息。 aggfunc参数允许您告诉.pivot_table您希望该列汇总的方式。

例如,假设您有下表:

index   screens_completed     sessions         
0       0                     2
1       1                     4
2       1                     1
3       1                     3
3       0                     3

pivot_table将为您创建两个组:

screens_completed == 0,会将[2, 3]传递到列sessions的aggfunc中。 screens_completed == 1,会将[4, 1, 3]传递到aggfuncsessions

如果您将len传递给aggfunc参数,那么您只需询问传递到aggfunc的列表的长度,这是另一种询问次数的方式每个screens_completed值都出现在原始DataFrame中。

您还可以通过将平均计算函数传递到aggfunc参数

来计算平均值

例如:

from numpy import mean
sessions_summed["mean"] = df.pivot_table(index="screens_completed", values="sessions", aggfunc=mean)