我有一个数据帧,我正在尝试分组和总结。我能够做到这一点,但我也想按元素分组。
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次出现的次数)与这个新的总结会话列一起出现。然后我想将总和列除以计数列。
我该怎么做?
答案 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]
传递到aggfunc
列sessions
如果您将len
传递给aggfunc
参数,那么您只需询问传递到aggfunc
的列表的长度,这是另一种询问次数的方式每个screens_completed
值都出现在原始DataFrame中。
aggfunc
参数例如:
from numpy import mean
sessions_summed["mean"] = df.pivot_table(index="screens_completed", values="sessions", aggfunc=mean)