Я пытаюсь использовать numpy.size () для подсчета размера группы для панд из 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
В коде, если мы используемgroupby () после ['C'] , размер группы равен 8, равен правильному размеру группы * номер столбца, то есть 2 * 4;если мы используем groupby () в следующем столбце [['C']] или ['C', 'D'] , размер группы будет правильным.
Почему?
Кажется, что панды сначала пытаются выполнить агрегацию, а затем делают фактический выбор столбца.