首页 > 解决方案 > dask 创建组合列以模拟按 2 列排序

问题描述

目前df.sort_values 中的 dask仅接受按 1 列排序。

我有一个具有这种结构的大文件

输入数据

我不知道如何先按整数列对数据进行排序,然后按日期排序

我认为创建一个组合列并对其进行排序将是最好的选择。问题是我不知道如何创建一个完成此操作的列。也许还有另一种选择可以做到这一点,而无需在 Dask 中创建一个组合列...

谢谢!

标签: pythondaskdask-dataframe

解决方案


假设d['col1']datetime-type,并且d['col2']int-type:

import struct
import numpy as np

# create a timedelta with days resolution as int
d['col1_int'] = ((d['col1_dt'] -
                  d['col1_dt'].min())/np.timedelta64(1,'D')
                ).astype(int)

d['sort_col'] = d.apply(lambda r: struct.pack("ll",r.col1_int,r.col2))
d = d.set_index('sort_col')
d = d.map_partitions(lambda x: x.sort_index())

从这个答案重做


推荐阅读