熊猫索引器过多(仅在索引仅包含False布尔值时才会引发错误?)

时间:2018-10-03 01:08:40

标签: pandas indexing

我正在尝试在Python中创建一个'upsetplot',它根据某些类别是True还是False来查看聚合数据。

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

当我尝试使用不包含True和False布尔值(不确定确切原因)的类别进行绘图时,似乎从Pandas软件包中引发了“索引过多”错误

但是无论何时我删除没有True和False的索引,那么绘图就可以了,否则我会返回错误:

  

文件   “ C:\ Users \ xxxxx \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py”,   _has_valid_tuple中的第220行       引发IndexingError('索引过多')

     

IndexingError:索引器太多

所以我想知道是否可以强制在索引中使用True和False级别,即使数据仅包含其中之一也是如此。我不确定这是否是索引的工作方式...

样本数据:

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 个答案:

答案 0 :(得分:0)

使用.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