如何为 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

评论:


我知道我可以使用构造函数构造一个带有预分配索引的数据框DataFrame。我需要完全修改现有的 DataFrame。

在这种特殊情况下DataFrame.shift可以工作 - 但是如果我需要分配一个任意自定义索引,而不是移动现有索引怎么办?

提前致谢。


白衣非少年
浏览 256回答 2
2回答

手掌心

在链式方法调用中,了解可以set_index使用不存在的标签调用的技巧可能会很有用,只要将要设置的标签包装在另一个列表中即可。>>> df.set_index([[1, 2, 3, 4]])   a  b1  1  22  2  33  3  44  4  5>>>>>> df.set_index([['w', 'x', 'y', 'z']])   a  bw  1  2x  2  3y  3  4z  4  5我真的不知道为什么会这样。查看set_index我最好的猜测的文档,这是创建只有一个级别的多索引的特殊情况,就像文档中的最后一个示例df.set_index([[1, 2, 3, 4], 'year'])但省略了第二个元素'year'。

函数式编程

你可以传递任何你想要的df.index,如果它是一个与你的数据帧长度相同的集合:df.index = range(1,5)>>> df   a  b1  1  22  2  33  3  44  4  5df.index = ['this', 'is', 'an', 'index']>>> df       a  bthis   1  2is     2  3an     3  4index  4  5此外,如果只是向原始索引添加一个的问题,您可以使用就地+运算符:>>> df   a  b0  1  21  2  32  3  43  4  5>>> df.index += 1>>> df   a  b1  1  22  2  33  3  44  4  5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python