Python 如何在数据帧中获得正确格式的索引

Python 如何在数据帧中获得正确格式的索引,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,具有如下数据帧: >>> df = pd.DataFrame({'name': ['foo', 'foo', 'bar', 'bar'], 'colx': [1, 2, 3, 4], 'coly': [5, 6, 7, 8]}) >>> df.set_index('name', inplace=True) >>> df colx coly name

具有如下数据帧:

>>> df = pd.DataFrame({'name': ['foo', 'foo', 'bar', 'bar'],
                   'colx': [1, 2, 3, 4],
                   'coly': [5, 6, 7, 8]})
>>> df.set_index('name', inplace=True)
>>> df
      colx  coly
name            
foo      1     5
foo      2     6
bar      3     7
bar      4     8
如何获得正确格式的索引,如:

      colx  coly
name            
foo      1     5
         2     6
bar      3     7
         4     8
这样熊猫就不会抱怨重复的索引。

一个(众多)选项是添加一个新的索引级别:

In [49]: df = df.set_index(df.groupby(level=0).cumcount().add(1) \
                             .to_frame('num')['num'],
                           append=True)

In [50]: df
Out[50]:
          colx  coly
name num
foo  1       1     5
     2       2     6
bar  1       3     7
     2       4     8
更新:不要被熊猫在多索引中显示重复项的方式所迷惑:

如果我们选择多索引的
名称
级别的所有值,我们仍将看到重复项:

In [51]: df.index.get_level_values(0)
Out[51]: Index(['foo', 'foo', 'bar', 'bar'], dtype='object', name='name')
这只是熊猫在多索引中表示重复项的方式。我们可以关闭此显示选项:

In [53]: pd.options.display.multi_sparse = False

In [54]: df
Out[54]:
          colx  coly
name num
foo  1       1     5
foo  2       2     6
bar  1       3     7
bar  2       4     8

In [55]: pd.options.display.multi_sparse = True

In [56]: df
Out[56]:
          colx  coly
name num
foo  1       1     5
     2       2     6
bar  1       3     7
     2       4     8

PS该选项不会改变索引值,它只影响多个索引的表示。这是可行的,但熊猫不应该有一种不太复杂的方法来实现相同的效果吗?除此之外,它还创建了一个多索引。@PedroA,你能再解释一下吗?你想实现什么?你打算如何使用索引?保留现有索引值是否重要?我们是否可以在索引值中添加一个数字,使其成为:
['foo1'、'foo2'、'bar1'、'bar2'等]
-这是否是您的一个选项?正如您所看到的,可能有许多不同的解决方案,但我们需要知道您想要实现什么…抱歉,我仍在学习pandas,但我认为生成的DF将只包含列
name
的索引。您现在添加了一个新索引
num
。我相信一定是这样的,但你能稍微扩展一下吗?为什么你的答案是这样的?