Сортировка в Даске

Я хочу найти альтернативу функции pandas.dataframe.sort_value в dask.
Я пришел через set_index, но он будет сортировать по одному столбцу.

Как отсортировать несколько столбцов фрейма данных Dask?

1 ответ

Решение

До сих пор Dask не поддерживает сортировку по нескольким столбцам. Однако создание нового столбца, объединяющего значения отсортированных столбцов, может быть полезным обходным путем.

d['new_column'] = d.apply(lambda r: str([r.col1,r.col2]), axis=1)
d = d.set_index('new_column')
d = d.map_partitions(lambda x: x.sort_index())

Изменить: выше работает, если вы хотите отсортировать по двум строкам. Я рекомендую создавать целочисленные (или байтовые) столбцы, а затем использовать struct.pack создать новый составной столбец байтов. Например, если col1_dt это дата и время col2 является целым числом:

import struct

# create a timedelta with seconds resolution. 
# i know this is the resolution is correct
d['col1_int'] = ((d['col1_dt'] -
                  d['col1_dt'].min())/np.timedelta64(1,'s')
                ).astype(int)

d['new_column'] = d.apply(lambda r: struct.pack("ll",r.col1_int,r.col2))
d = d.set_index('new_column')
d = d.map_partitions(lambda x: x.sort_index())
Другие вопросы по тегам