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

2024-03-29 09:05:50 发布

您现在位置:Python中文网/ 问答频道 /正文

有这样的数据帧:

>>> 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

这样熊猫就不会抱怨重复索引了。你知道吗


Tags: 数据nametruedataframedfindexfoo格式
1条回答
网友
1楼 · 发布于 2024-03-29 09:05:50

其中一个选择是添加新的索引级别:

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

更新:不要被熊猫在多索引中显示重复项的方式所迷惑:

如果我们选择多索引的name级别的所有值,我们仍然会看到重复项:

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此选项不会更改索引值,仅影响多个索引的表示

相关问题 更多 >