首页 > 解决方案 > 如何为 pandas DataFrame 设置全新的索引,而不是基于以前的索引数据关系?

问题描述

如何在与旧索引没有任何关系的情况下为我的数据分配一个全新的索引?

我知道reindex方法

df = pd.DataFrame({'a': [1,2,3,4], 'b': [2,3,4,5]})
df

    a   b
0   1   2
1   2   3
2   3   4
3   4   5

df.reindex([1,2,3,4])

    a   b
1   2.0 3.0
2   3.0 4.0
3   4.0 5.0
4   NaN NaN

...但我只想修改行索引以获得

    a   b
1   1   2
2   2   3
3   3   4
4   4   5

评论:

  1. 我知道我可以使用构造函数构造一个带有预分配索引的数据框DataFrame。我需要完全修改现有的 DataFrame。
  2. 在这种特殊情况下DataFrame.shift可以工作 - 但如果我需要分配任意自定义索引,而不是移动现有索引怎么办?

提前致谢。

标签: pythonpandasdataframe

解决方案


set_index在链式方法调用中,只要将要设置的标签包装在另一个列表中,了解可以使用不存在的标签调用的技巧可能会很有用。

>>> df.set_index([[1, 2, 3, 4]])
   a  b
1  1  2
2  2  3
3  3  4
4  4  5
>>>
>>> df.set_index([['w', 'x', 'y', 'z']])
   a  b
w  1  2
x  2  3
y  3  4
z  4  5

我真的不知道为什么会这样。查看set_index我最好的猜测的文档是,这是创建只有一个级别的多索引的特殊情况,就像文档中的最后一个示例

df.set_index([[1, 2, 3, 4], 'year'])

但省略了第二个元素'year'


推荐阅读