根据列表重置索引
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: 无法从重复的轴重新索引
还有其他方法可以做到吗?
【问题讨论】:
旁注:不要在类之后命名变量,例如使用lst
或L
而不是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参数设置原行索引的层列表指定需要转化为数据列的层)
pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用reset_index函数把行索引重置为列数据(原来的行索名称转化为列索引的最外层)