我有一个数据框df,我使用它的几列到groupby:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
以上面的方式,我几乎得到了我需要的表(数据框)。 缺少的是包含每个组中行数的附加列。 换句话说,我有意思,但我也想知道有多少数字被用来获得这些手段。 例如,在第一组中有8个值,在第二组中有10个,依此类推。
简而言之:如何获取数据帧的分组统计信息?
对于不熟悉此问题的人,在更新版本的pandas中,您可以在groupby对象上调用describe()以有效地返回常见统计信息。 有关更多信息,请参阅此答案。
快速回答:
获取每组行数的最简单方法是调用.size(),返回Series:
df.groupby(['col1','col2']).size()
通常您希望此结果为DataFrame(而不是Series),因此您可以执行以下操作:
df.groupby(['col1', 'col2']).size().reset_index(name='counts')
如果您想了解如何计算每个组的行数和其他统计数据,请继续阅读下面的内容。
详细示例:
请考虑以下示例数据帧:
In [2]: df
Out[2]:
col1 col2 col3 col4 col5 col6
0 A B 0.20 -0.61 -0.49 1.49
1 A B -1.53 -1.01 -0.39 1.82
2 A B -0.44 0.27 0.72 0.11
3 A B 0.28 -1.32 0.38 0.18
4 C D 0.12 0.59 0.81 0.66
5 C D -0.13 -1.65 -1.64 0.50
6 C D -1.42 -0.11 -0.18 -0.44
7 E F -0.00 1.42 -0.26 1.17
8 E F 0.91 -0.47 1.35 -0.34
9 G H 1.48 -0.63 -1.14 0.17
首先让我们使用.size()来获取行数:
In [3]: df.groupby(['col1', 'col2']).size()
Out[3]:
col1 col2
A B 4
C D 3
E F 2
G H 1
dtype: int64
然后让我们使用.size().reset_index(name='counts')来获取行数:
In [4]: df.groupby(['col1', 'col2']).size().reset_index(name='counts')
Out[4]:
col1 col2 counts
0 A B 4
1 C D 3