通过位置访问带有整数索引的排序pandas系列中的值

4 投票
2 回答
13140 浏览
提问于 2025-04-17 13:20

我有一个用整数作为索引的 pandas Series,并且我已经按照值对它进行了排序。现在我想根据位置来访问这个 Series 中的值。

举个例子:

s_original = pd.Series({0: -0.000213, 1: 0.00031399999999999999, 2: -0.00024899999999999998, 3: -2.6999999999999999e-05, 4: 0.000122})
s_sorted = np.sort(s_original)

In [3]: s_original
Out[3]: 
0   -0.000213
1    0.000314
2   -0.000249
3   -0.000027
4    0.000122

In [4]: s_sorted
Out[4]: 
2   -0.000249
0   -0.000213
3   -0.000027
4    0.000122
1    0.000314

In [5]: s_sorted[3]
Out[5]: -2.6999999999999999e-05

但是我想获取值 0.000122,也就是位置 3 的那个项目。
我该怎么做呢?

2 个回答

5

你可以使用 iget 来根据位置获取数据:
(实际上,这个方法是专门为了避免这种模糊性而创建的。)

In [1]: s = pd.Series([0, 2, 1])

In [2]: s.sort()

In [3]: s
Out[3]: 
0    0
2    1
1    2

In [4]: s.iget(1)
Out[4]: 1

.

关于使用整数索引时 .ix 的行为,可以在 pandas 的“注意事项” 中找到:

在 pandas 中,我们的总体观点是 标签比整数位置更重要。因此,当使用整数轴索引时,只能使用基于标签的索引,像 .ix 这样的标准工具。

这个决定是为了防止模糊和潜在的错误(许多用户在 API 改变后报告发现了错误,因为之前的做法是“回退”到基于位置的索引)。

注意:如果你使用的是非整数索引,这个 是可以 工作的,因为 .ix 在这种情况下没有模糊性。

例如:

In [11]: s1 = pd.Series([0, 2, 1], list('abc'))

In [12]: s1
Out[12]: 
a    0
b    2
c    1

In [13]: s1.sort()

In [14]: s1
Out[14]: 
a    0
c    1
b    2

In [15]: s1.ix[1]
Out[15]: 1
7

把这一行替换成

b = np.sort(a)

用下面这一行

b = pd.Series(np.sort(a), index=a.index)

这样做会对数值进行排序,但会保留它们的索引。

补充说明:

如果想要在排序后的序列中获取第四个数值,可以使用:

np.sort(a).values[3]

撰写回答