根据列表重置索引

Posted

技术标签:

【中文标题】根据列表重置索引【英文标题】:resetting index based on list 【发布时间】:2019-12-10 04:13:37 【问题描述】:

我想

假设我有这样的数据框

 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 中 raise ValueError("cannot reindex from a duplicate axis")

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

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

【问题讨论】:

旁注:不要在类之后命名变量,例如使用lstL 而不是list 【参考方案1】:

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

Pandas 可用的一个有效解决方案是Categorical Data,注意指定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

【讨论】:

【参考方案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

【讨论】:

以上是关于根据列表重置索引的主要内容,如果未能解决你的问题,请参考以下文章

单击的列表项的索引不会重置

如何将 UIPickerView 重置为索引:0,iPhone

单击时将索引值重置为零

pandas读取csv数据参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用reset_index函数把行索引重置为列数据(level参数设置原行索引的层列表指定需要转化为数据列的层)

列表未在 for 循环中重置

pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用reset_index函数把行索引重置为列数据(原来的行索名称转化为列索引的最外层)