首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按顺序标注索引以复制DataFrame索引

按顺序标注索引以复制DataFrame索引
EN

Stack Overflow用户
提问于 2017-07-31 06:37:39
回答 1查看 193关注 0票数 2

我有一个这样的DataFrame:

代码语言:javascript
复制
df = pd.DataFrame([100,200,300], [1,1,2])

     0
1  100
1  200
2  300

我想添加一个二级索引(MultiIndex),如下所示:

代码语言:javascript
复制
           0
index i2     
1     0  100
      1  200
2     0  300

也就是说,我希望二级索引(在这里称为i2)为零,其中df.duplicated()为False (意味着索引与上面的索引不相同),并且是其他行的顺序编号。

一般的想法是采用一个有重复的索引,并通过引入一个从零开始的额外的索引级别,使其不再具有重复的索引,并且只在需要时递增,以使完整的索引对每一行都是唯一的。

解决方案应该使用NumPy或Pandas函数,而不是Python循环,也就是说,应该将其向量化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-31 06:39:30

我认为您可以使用cumcount (首先使用SeriesDataFrame,所以首先使用Index.to_seriesSeries构造函数)和MultiIndex.from_arrays

代码语言:javascript
复制
s = df.index.to_series()
#alternative solution
#s = pd.Series(df.index)
s = s.groupby(s).cumcount()
df.index = pd.MultiIndex.from_arrays([df.index, s], names=['index','i2'])
print (df)
            0
index i2     
1     0   100
      1   200
2     0   300

谢谢John Galt

代码语言:javascript
复制
df.index = pd.MultiIndex.from_arrays([df.index, df.groupby(df.index).cumcount()],
                                     names=['index','i2'])

print (df)
            0
index i2     
1     0   100
      1   200
2     0   300
代码语言:javascript
复制
df.index = pd.MultiIndex.from_arrays([df.index, df.groupby(level=0).cumcount()],
                                     names=['index','i2'])
print (df)
            0
index i2     
1     0   100
      1   200
2     0   300
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45408952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档