根据列表重置索引

时间:2018-06-24 14:32:31

标签: python python-3.x pandas dataframe

我想根据列表重设索引

让我说我有这样的数据框

 list = ['RGB','RBR','RGD']

       a   b

RBR    0   1 
RGD    10  2  
RGB    11  3  
RGD    10  2 
RGD    10  2  
RGD    10  2  
RBR    0   1  
RGB    11  3  

df.reindex(index = list)

  

文件   “ c:\ users \ yugas \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages \ pandas \ core \ indexes \ base.py”,   第3560行,在_can_reindex中       引发ValueError(“无法从重复的轴重新索引”)

     

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

还有其他方法可以做到吗?

2 个答案:

答案 0 :(得分:2)

不要重新索引,只需使用.loc

li =  ['RGB','RBR','RGD']
df = df.loc[li]

    a  b
RGB  11  3
RGB  11  3
RBR   0  1
RBR   0  1
RGD  10  2
RGD  10  2
RGD  10  2
RGD  10  2

答案 1 :(得分:1)

您的索引中有重复的值。 pd.DataFrame.reindex要求您的索引必须唯一。

Categorical Data是Pandas可用的一种有效解决方案,请小心指定ordered=True

L = ['RGB', 'RBR', 'RGD']

df.index = pd.Categorical(df.index, categories=L, ordered=True)

res = df.sort_index()

print(res)

      a  b
RGB  11  3
RGB  11  3
RBR   0  1
RBR   0  1
RGD  10  2
RGD  10  2
RGD  10  2
RGD  10  2