У меня есть серия панд с целочисленным индексом, который я отсортировал (по значению), как я получаю доступ к значениям по позиции в этой серии.

Например:

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.
Как я могу это сделать?

4
Jonas 22 Янв 2013 в 13:55

2 ответа

Лучший ответ

Заменить строку

b = np.sort(a)

С участием

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

Это позволит отсортировать значения, но сохранить индекс.

РЕДАКТИРОВАТЬ:

Чтобы получить четвертое значение в отсортированной серии:

np.sort(a).values[3]
7
eumiro 22 Янв 2013 в 10:17

Вы можете использовать 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 с целочисленным индексом отмечено в Панды" попали ":

В пандах наша общая точка зрения заключается в том, что метки важнее, чем целочисленные местоположения . Следовательно, с целочисленным индексом оси возможна только индексация на основе меток с помощью стандартных инструментов, таких как .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
4
Community 20 Июн 2020 в 09:12