Пока что 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())