我正试图取消对熊猫的多重指数,我不断得到:
ValueError: Index contains duplicate entries, cannot reshape
给定一个包含四列的数据集:
我首先设置了一个三级多索引:
In [37]: e.set_index(['id', 'date', 'location'], inplace=True)
In [38]: e
Out[38]:
value
id date location
id1 2014-12-12 loc1 16.86
2014-12-11 loc1 17.18
2014-12-10 loc1 17.03
2014-12-09 loc1 17.28
然后我试着打开位置:
In [39]: e.unstack('location')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-39-bc1e237a0ed7> in <module>()
----> 1 e.unstack('location')
...
C:\Anaconda\envs\sandbox\lib\site-packages\pandas\core\reshape.pyc in _make_selectors(self)
143
144 if mask.sum() < len(self.index):
--> 145 raise ValueError('Index contains duplicate entries, '
146 'cannot reshape')
147
ValueError: Index contains duplicate entries, cannot reshape
这是怎么回事?
有一个更简单的方法来解决这个问题。
获得
ValueError: Index contains duplicate entries, cannot reshape
的原因是,一旦取消对“Location
”的堆栈,则剩余的索引列“id
”和“date
”组合不再是唯一的。您可以通过保留默认索引列(row#)来避免这种情况,并且在使用“
id
”、“date
”和“location
”设置索引时,将其添加到“append
”模式而不是默认覆盖模式。所以使用
完成此操作后,索引列仍将具有默认索引以及设置的索引。并且
unstack
将起作用。告诉我结果如何。
我有这样的问题。在我的例子中,问题是在数据中-我的列“information”包含一个唯一的值,它导致了错误
更新:若要更正工作“枢轴”对(id_user,information),不能有重复项
有效:
它不起作用:
来源:https://stackoverflow.com/a/37021196/6088984
下面是一个示例DataFrame,它有相同索引的重复值。问题是,您想将它们聚合还是保留为多行?
一种解决方案是
reset_index
(回到df
)并使用pivot_table
。另一个选项(如果不想聚合)是附加一个虚拟级别,取消堆栈,然后删除该虚拟级别。。。
相关问题 更多 >
编程相关推荐