Pandas Multiindex рассчитывать на уровни - PullRequest
0 голосов
/ 17 октября 2019

Данные:

index = [('A', 'aa', 'aaa'),
         ('A', 'aa', 'aab'),
         ('B', 'bb', 'bbb'),
         ('B', 'bb', 'bbc'),
         ('C', 'cc', 'ccc')
        ]
values = [0.07, 0.04, 0.04, 0.06, 0.07]

s = pd.Series(data=values, index=pd.MultiIndex.from_tuples(index))

s
A  aa  aaa    0.07
       aab    0.04
B  bb  bbb    0.04
       bbc    0.06
C  cc  ccc    0.07

Получить среднее значение первых двух уровней легко:

s.mean(level=[0,1])

Результат:

A  aa    0.055
B  bb    0.050
C  cc    0.070

Но получитьрассчитывать на первых двух уровнях не работает одинаково:

#s.count(level=[0,1]) # does not work

Я могу обойтись с:

s.reset_index().groupby(['level_0', 'level_1']).size()

level_0  level_1
A        aa         2
B        bb         2
C        cc         1

Но должен быть более чистый способ получить тот же результат? Я что-то упускаю из виду?

1 Ответ

1 голос
/ 17 октября 2019

Кажется, ошибка, вы можете использовать:

print (s.groupby(level=[0,1]).size())
#with exclude NaNs
#print (s.groupby(level=[0,1]).count())
A  aa    2
B  bb    2
C  cc    1
dtype: int64
...