使用索引替换Pandas Series值

3 投票
1 回答
741 浏览
提问于 2025-04-17 23:20

我正在尝试根据索引给现有的系列赋新值。但是结果和我预期的不一样。下面是一个简单的代码示例,展示了这个结果。

import pandas as pd
import numpy as np

x = pd.Series(range(10))
y = pd.Series(range(10, 20))
ind = np.random.permutation(range(10))

x
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9

y

0    10
1    11
2    12
3    13
4    14
5    15
6    16
7    17
8    18
9    19

ind
array([0, 9, 8, 7, 3, 6, 4, 5, 2, 1])

x[ind] = y[ind]  #try to assign based on identical index 
x

我希望得到以下的 x。

0    10
1    11
2    12
3    13
4    14
5    15
6    16
7    17
8    18
9    19

但是,我得到了

0    10
1    19
2    18
3    17
4    13
5    16
6    14
7    15
8    12
9    11

基本上,它把 y[ind] 赋值给了 x,却忽略了索引。我是不是做错了什么?如果 ind 没有包含 x 的全部数据,这个赋值看起来是正确的。

看起来在 0.13.0 和 0.13.1 版本中有个 bug。在开发版本中已经修复了。

1 个回答

2

我试了你发的代码,得到了你期待的x的结果:

0    10
1    11
2    12
3    13
4    14
5    15
6    16
7    17
8    18
9    19

也许你用的是较旧版本的pandas?

撰写回答