Pandas:将重复的索引更改为分层索引

3

请看下面的例子。

假设有一个数据框,其中索引值重复了,如何获取一个新的数据框,其层次化索引的第一级为原始索引,第二级为0、1、2、...、n?

例如:

>>> df
   0  1
a  2  4
a  4  6
b  7  8
b  2  4
c  3  7
>>> df2 = df.some_operation()
>>> df2
      0  1
a  0  2  4
   1  4  6
b  0  7  8
   1  2  4
c  0  3  7
2个回答

1
你可以使用 cumcount
df.assign(level2=df.groupby(level=0).cumcount()).set_index('level2',append=True)
Out[366]: 
          0  1
  level2      
a 0       2  4
  1       4  6
b 0       7  8
  1       2  4
c 0       3  7

另一种使用 pd.MultiIndex 的替代方法是:df.set_index(pd.MultiIndex.from_arrays([df.index, df.groupby(level=0).cumcount()])) - Bharath M Shetty

0

可以用假的方式(完全不推荐,不要使用这种方法):

>>> df.index=[v if i%2 else '' for i,v in enumerate(df.index)]
>>> df.insert(0,'',([0,1]*3)[:-1])
>>> df
      0  1
   0  2  4
a  1  4  6
   0  7  8
b  1  2  4
   0  3  7
>>> 

更改索引名称并创建一个列,该列的列名为''(空字符串)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接