为什么要使用带有或不带有列选择的pandas groupby()获得不同的组大小数字?

时间:2019-06-19 16:51:33

标签: pandas pandas-groupby

我尝试使用numpy.size()来计算pandas Dataframe groupby()中的组的组大小,结果很奇怪。

>>> df=pd.DataFrame({'A':[1,1,2,2], 'B':[1,2,3,4],'C':[0.11,0.32,0.93,0.65],'D':["This","That","How","What"]})
>>> df
   A  B     C     D
0  1  1  0.11  This
1  1  2  0.32  That
2  2  3  0.93   How
3  2  4  0.65  What
>>> df.groupby('A',as_index=False).agg(np.size)
   A  B    C  D
0  1  2  2.0  2
1  2  2  2.0  2
>>> df.groupby('A',as_index=False)['C'].agg(np.size)
   A  C
0  1  8
1  2  8
>>> df.groupby('A',as_index=False)[['C']].agg(np.size)
   A    C
0  1  2.0
1  2  2.0
>>> grouped = df.groupby('A',as_index=False)
>>> grouped['C','D'].agg(np.size)
   A    C  D
0  1  2.0  2
1  2  2.0  2

在代码中,如果我们在 ['C'] 之后使用groupby(),则组大小为8,等于正确的组大小*列号,即2 * 4;如果我们在列 [['C']]或['C','D'] 之后使用groupby(),则组大小正确。

为什么?

似乎熊猫先尝试执行聚合,然后再进行实际的列选择。

1 个答案:

答案 0 :(得分:0)

如果您想知道组的大小,请使用以下选项之一:

grouped.size()
grouped.agg("size)
len(grouped)