У панд слишком много индексаторов (выдает ошибку, только если индекс содержит только ложные логические значения?) - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать в Python 'upsetplot', который просматривает агрегированные данные, основываясь на том, являются ли определенные категории True или False.

https://pypi.org/project/upsetplot/

Похоже, чтоОшибка «Слишком много индексаторов» из пакета Pandas, когда я пытаюсь построить график, используя категорию, которая не содержит как истинных, так и ложных логических значений (точно не знаю, почему?)

Но каждый раз, когда я удаляю индексы, которые этого не делаютимеют значения True и False, тогда график работает, в противном случае я возвращаю ошибку:

Файл "C: \ Users \ xxxxx \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pandas\ core \ indexing.py ", строка 220, в _has_valid_tuple повысить IndexingError ('Too many indexers') *

IndexingError: слишком много indexer

Так что мне интересно, поможет ли этоесли я смогу «форсировать» уровни True и False в индексах, даже если данные содержат только 1 из них.Я не уверен, что именно так работают индексы ...

Пример данных:

data = pd.DataFrame({'userID':['Luis', 'Mike', 'Harvey'], 'category1':[True, False, True], 'category2': [True, True, False], 'category3':[False, False, False]})
data.set_index(['category1', 'category2', 'category3'], inplace=True)
data2 = data.groupby(['category1', 'category2', 'category3']).size()
data2.index
plot(data2)

Когда я запускаю график, я получаю ошибку "слишком много индексаторов".

Когда я убираю категорию 3 из индекса, он работает нормально и строит график.

data = pd.DataFrame({'userID':['Luis', 'Mike', 'Harvey'], 'category1':[True, False, True], 'category2': [True, True, False], 'category3':[False, False, False]})
data.set_index(['category1', 'category2'], inplace=True)
data2 = data.groupby(['category1', 'category2']).size()
data2.index
plot(data2)

Интересно, что когда я изменяю категорию 3, чтобы включить True & False, он тоже работает:

data = pd.DataFrame({'userID':['Luis', 'Mike', 'Harvey'], 'category1':[True, False, True], 'category2': [True, True, False], 'category3':[True, False, False]})
data.set_index(['category1', 'category2', 'category3'], inplace=True)
data2 = data.groupby(['category1', 'category2', 'category3']).size()
data2.index
plot(data2)

Кто-нибудь имеет представление о том, что происходит и как я могу это исправить?

По сути, у меня есть 3 индекса, которые состоят только из False (как в 1-м примере кода), который бросает меняошибка «Слишком много индексаторов».

Как мне исправить это?

1 Ответ

0 голосов
/ 03 октября 2018

Используйте .count(), а не .size()

data2 = data.groupby(['category1', 'category2', 'category3']).count()

                                     userID
category1   category2   category3   
    False        True       False         1
     True       False       False         1
                 True       False         1

data2.plot.bar()

enter image description here

data2.plot()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...