Сортировать ряды кортежей по второму предмету в пандах - PullRequest
0 голосов
/ 04 июля 2018

У меня есть серия кортежей с идентификатором в качестве индекса и кортежи с координатами в качестве значений. Я хочу заказать серию по долготе, которая является вторым элементом в кортеже.

Функция df.sort_values() упорядочение по первому элементу в кортеже.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

По моему мнению, вы не должны хранить данные широты / долготы в виде кортежей в кадре данных Pandas. Вы теряете всю векторизованную функциональность с числовыми операциями.

Вместо этого вы можете разделить на отдельные серии. Это также упростит синтаксис сортировки:

df = pd.DataFrame({'LatLon': [(14, 45), (33, 64), (67, 13)]})

res = pd.DataFrame(df['LatLon'].values.tolist(), columns=['Lat', 'Lon'])\
        .sort_values('Lon')

print(res)

   Lat  Lon
2   67   13
0   14   45
1   33   64
0 голосов
/ 04 июля 2018

Вы можете выбрать значения выбора путем индексации с помощью str[1] и получить позиции путем сортировки значения по argsort, последнее изменение порядка путем выбора по iloc:

#data from jpp answer
df = df.iloc[df['LatLon'].str[1].argsort()]
print (df)
     LatLon
2  (67, 13)
0  (14, 45)
1  (33, 64)

Detail

print (df['LatLon'].str[1].argsort())
0    2
1    0
2    1
Name: LatLon, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...