Предположим, у меня есть мультииндекс, как мне считать записи индекса? Более явно я имею в виду X, Y - мой многоиндексный пример ниже. Допустим, у меня есть 3 человека в этом фрейме данных. Как мне их найти, так как длина фрейма данных дает мне общее количество строк, а это не то, что я хочу.

          Modules
X     Y   
1    11         A
     11         B
     11         C
2    13         A
     13         B
3    17         A
     17         B
     17         D

Как мне посчитать длину этого мультииндекса?

2
Shyryu 31 Авг 2017 в 05:38

4 ответа

Лучший ответ

Вариант 1

df.index.to_series().nunique()

3

Вариант 2

df.groupby(df.index.names).ngroups
# df.groupby(level=df.index.names).ngroups
# for pandas < 0.20 or if column name conflict

3
4
piRSquared 31 Авг 2017 в 13:36

Один из способов сделать это заключается в следующем:

df.index.unique().labels[0].shape[0]
0
Scott Boston 31 Авг 2017 в 03:42

Длина индекса должна быть длиной DataFrame, даже если DataFrame не печатается, чтобы отображаться таким образом. При использовании двухуровневого MultiIndex, если вы вызовете либо df.index.get_level_values(0) df.index.get_level_values(1), вы увидите, что возвращаемый уровень индекса имеет ту же длину, что и ваш DataFrame (с элементами, повторяемыми по мере необходимости).

Если вы знаете, что каждая пара индексов будет уникальной комбинацией, как в вашем примере, вы можете позвонить:

df.index.get_level_values(0).nunique()

... с любым уровнем вашего MultiIndex в качестве аргумента (то есть либо 0 или 1), и вы получите количество людей. Если у вас получатся комбинации, в которых предыдущее предположение не будет выполнено, вы можете попробовать вызвать df.index.nunique(), хотя это может вызвать ошибку, если в индексе есть дубликаты. Самая безопасная ставка может быть:

 d.index.value_counts().size

... который немного обходной, но гарантирует, что вы получите количество уникальных комбинаций.

0
cmaher 31 Авг 2017 в 03:54

Как насчет:

len(df.groupby(level=0))

Преимуществами являются более лаконичный код и тот факт, что вы действительно можете указать уровень мультииндекса df, для которого вы хотите выполнить эту операцию.

2
pol690 18 Сен 2019 в 15:56