Сортировка в Даске
Я хочу найти альтернативу функции 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())