我尝试使用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(),则组大小正确。
为什么?
似乎熊猫先尝试执行聚合,然后再进行实际的列选择。
答案 0 :(得分:0)
如果您想知道组的大小,请使用以下选项之一:
grouped.size()
grouped.agg("size)
len(grouped)