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
。我相信一定是这样的,但你能稍微扩展一下吗?为什么你的答案是这样的?