通过位置访问带有整数索引的排序pandas系列中的值
我有一个用整数作为索引的 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]