为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 Pandas DataFrame 设置绝对新的索引,而不是基于以前的索引数据关系?

如何为 Pandas DataFrame 设置绝对新的索引,而不是基于以前的索引数据关系?

白衣非少年 2021-09-11 19:18:09
如何在与旧索引没有任何关系的情况下为我的数据分配一个全新的索引?我知道reindex方法df = pd.DataFrame({'a': [1,2,3,4], 'b': [2,3,4,5]})df    a   b0   1   21   2   32   3   43   4   5df.reindex([1,2,3,4])    a   b1   2.0 3.02   3.0 4.03   4.0 5.04   NaN NaN...但我只想修改行索引以获得    a   b1   1   22   2   33   3   44   4   5评论:我知道我可以使用构造函数构造一个带有预分配索引的数据框DataFrame。我需要完全修改现有的 DataFrame。在这种特殊情况下DataFrame.shift可以工作 - 但是如果我需要分配一个任意自定义索引,而不是移动现有索引怎么办?提前致谢。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

在链式方法调用中,了解可以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'。


查看完整回答
反对 回复 2021-09-11
?
函数式编程

TA贡献1807条经验 获得超9个赞

你可以传递任何你想要的df.index,如果它是一个与你的数据帧长度相同的集合:


df.index = range(1,5)

>>> df

   a  b

1  1  2

2  2  3

3  3  4

4  4  5


df.index = ['this', 'is', 'an', 'index']

>>> df

       a  b

this   1  2

is     2  3

an     3  4

index  4  5

此外,如果只是向原始索引添加一个的问题,您可以使用就地+运算符:


>>> df

   a  b

0  1  2

1  2  3

2  3  4

3  4  5


>>> df.index += 1


>>> df

   a  b

1  1  2

2  2  3

3  3  4

4  4  5


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 255 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号