我正在运行一台拥有大量 RAM(190GB)的工作站。
我们需要在数百万条记录的数据集上进行
我们的问题是性能非常慢。在
我们也尝试使用dask作为该帖子中建议的方式,但仍然遇到问题,
如有建议,请提出。
groupby
操作[通常包含 2 个 ID 列、1 个类型 ID 列、1 个日期列和 3-5 个分类列](在 10-30 M 范围内),同时生成聚合列的列表。我们的问题是性能非常慢。在
R
中运行相同的代码不到一个小时。
当前的测试数据集仅有 770 万条记录。数据如下:ID1 ID2 typeid date_ cat1 cat2 cat3
12554876563 1435465465 09238423 2013-04-2 cat11 cat21 cat31
12554876563 1435465465 984375 2012-11-12 cat12 cat21 cat33
125543213 12554876563 01248423 2012-04-2 cat11 cat23 cat31
5436236563 125543213 09275423 2017-04-2 cat13 cat24 cat32
groupby
的用法如下:
def agg_col(var):
li = ';'.join([str(i) for i in set(var.dropna())])
return li
df = ( df.groupby(['ID1','ID2']).agg(lambda x: agg_col(x))
.assign(weight=df.groupby(['ID1','ID2']).size())
我们也尝试使用dask作为该帖子中建议的方式,但仍然遇到问题,
aggregate-agg
进程需要一个小时以上的时间。如有建议,请提出。
str
函数占用了大部分时间。 - mdurant;
为分隔符的列表,我有哪些选项?也许在运行groupby
之前对所有列进行矢量化处理。 - skibee--array-delimiter
。但是我们仍然需要将值连接成列表。 - skibee