如何为重复的索引设置多索引



我有一个带有重复索引的数据帧 df:

        a
o_idx
411     x
412     y
412     x
412     z
450     a
450     b

我想将 multindex 分配给重复的行,例如:

                    a
o_idx    index
411        0        x
412        0        y
412        1        x
412        2        z
450        0        a
450        1        b

其中,如果新索引不是重复项,则为 0。如果是重复索引,则新索引应该是重复次数的长度范围。

我尝试首先通过尝试摆脱重复项来制作两个数据帧:

a = df[~df.index.duplicated(keep=False)]
a = a.reset_index()
a.index = np.zeros(len(a.index), dtype = int)
a = a.reset_index()
a = a.set_index(['index', 'o_idx'])
a.index.names = ['index', 'o_idx']

然后获取重复项:

b = df[df.index.duplicated(keep=False)]
b = b.reset_index()
b.index = range(len(b.index))
b = b.reset_index()
b = b.set_index(['index', 'o_idx'])
b.index.names = ['index', 'o_idx']

然后连接:

c = pd.concat([a,b])

但是,这并没有给我正确的结果,因为 b 等于:

                    a
o_idx    index
412        0        y
412        1        x
412        2        z
450        3        a
450        4        b

所以我遇到了与开始时完全相同的问题。有没有更好的方法来解决这个问题?

这是使用cumcount然后返回set_index的一种方法

yourdf=df.assign(index=df.groupby(level=0).cumcount()).set_index('index',append=True)
yourdf
Out[568]: 
             a
o_idx index   
411   0      x
412   0      y
      1      x
      2      z
450   0      a
      1      b

我的解决方案直接设置为 index

In [1649]: df.set_index(df.groupby(level=0).cumcount(), append=True)
Out[1649]:
       a
411 0  x
412 0  y
    1  x
    2  z
450 0  a
    1  b

相关内容

  • 没有找到相关文章

最新更新