Сортировка в Даске - PullRequest
0 голосов
/ 12 июня 2018

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

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

1 Ответ

0 голосов
/ 14 августа 2018

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