首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫力重索引重复轴

熊猫力重索引重复轴
EN

Stack Overflow用户
提问于 2021-12-14 14:25:19
回答 1查看 211关注 0票数 1

我希望按特定列重新索引dataframe的行,假设dataframe包含列colX。这意味着我需要调用方法df.set_index(colX)

假设df.head()是

代码语言:javascript
复制
colX colY
2.71 foo1
3.14 foo2
6.9 foo3
6.9 foo4
9.6 foo5

当我重新索引它的时候

代码语言:javascript
复制
df=df.set_index('colX')
df2=df.reindex(index=[9.6,6.9,6.9,3.14,2.71])

我希望df2.head()的结果是

代码语言:javascript
复制
colX colY
9.6 foo5
6.9 foo3 # duplicate index in colX
6.9 foo4 # duplicate index in colX
3.14 foo2
2.71 foo1

或者这个

代码语言:javascript
复制
colX colY
9.6 foo5
6.9 foo4 # duplicate index in colX
6.9 foo3 # duplicate index in colX
3.14 foo2
2.71 foo1

如果存在重复轴,则重新索引将无法工作。

ValueError:无法从重复轴重新索引

注意: df是由df=pd.read_csv('foobar.csv')创建的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-14 14:27:03

错误意味着至少有一个重复的值,因此reindex会引发错误,因为只处理传递给reindex的列表中的唯一值。

GroupBy.cumcountDataFrame.merge创建的具有默认内部连接的helper列的解决方案:

代码语言:javascript
复制
df['g'] = df.groupby('colX').cumcount()

L = [9.6,6.9,6.9,3.14,2.71]

df11 = pd.DataFrame({'colX': L})
df11['g'] = df11.groupby('colX').cumcount()
print (df11)
   colX  g
0  9.60  0
1  6.90  0
2  6.90  1
3  3.14  0
4  2.71  0

df = df.merge(df11, on=['colX','g'])
print (df)
   colX  colY  g
0  2.71  foo1  0
1  3.14  foo2  0
2  6.90  foo3  0
3  6.90  foo4  1
4  9.60  foo5  0

或使用reindex

代码语言:javascript
复制
df['g'] = df.groupby('colX').cumcount()

L = [9.6,6.9,6.9,3.14,2.71]

df11 = pd.DataFrame({'colX': L})
df11['g'] = df11.groupby('colX').cumcount()
print (df11)

df=df.set_index(['colX', 'g']).reindex(df11.set_index(['colX','g']).index)
print (df)
        colY
colX g      
9.60 0  foo5
6.90 0  foo3
     1  foo4
3.14 0  foo2
2.71 0  foo1

错误的第一个解决方案:

代码语言:javascript
复制
df=df.set_index('colX')
df2=df.loc[[9.6,6.9,6.9,3.14,2.71]]
print (df2)
      colY
colX      
9.60  foo5
6.90  foo3 > combinations of 6.9 (2 times in original * 2 times in list = 4)
6.90  foo4
6.90  foo3
6.90  foo4
3.14  foo2
2.71  foo1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70350564

复制
相关文章

相似问题

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