如何解决Python:按唯一 ID 分组的分块数据的并行化
我有巨大的 (df
) 按 Date_start
和 ID
排序:
Date_start ID Start_flag End_flag Date_end
01-01-2019 100 1 0 01-02-2019
01-02-2019 100 0 0 01-03-2019
01-03-2019 100 0 0 01-04-2019
01-06-2019 100 0 0 01-07-2019
01-09-2019 500 1 0 01-10-2019
01-11-2019 500 0 0 01-12-2019
01-05-2020 500 0 0 01-06-2020
01-06-2020 500 0 0 01-07-2020
01-07-2020 500 0 0 01-08-2020
01-08-2020 500 0 0 01-09-2020
01-09-2020 700 1 0 01-12-2020
01-01-2021 700 0 0 01-04-2021
01-04-2021 700 0 1 01-07-2021
我还有一个函数,它有助于定义每一行 date_ranges 中的重叠。
我需要为由 df
分组的 ID
应用此函数,如下所示:
df.groupby('ID').apply(detect_overlapping)
查看最后,我按唯一 ID 将 df
拆分为块,最后 df_chunked
- 是每个块中有 25000 个 ID 的数据帧列表。
为了在每个块中并行计算,我使用 multiprocessing.Pool
:
def applyParallel(grouped_df,func):
num_cores = 8
with Pool(num_cores) as pool:
result_list = pool.map(func,[group for name,group in grouped_df])
pool.close()
pool.join()
return pd.concat(result_list,axis=0)
我将它应用到 df_chunked
的循环中:
result = []
for i in range(0,len(df_chunked)):
print('chunk# ',i)
gr_data = df_chunked[i].groupby('ID')
df_with_target = applyParallel(gr_data,detect_overlapping)
result.append(df_with_target)
上述方法的性能不佳。我还尝试测试 pandarallel
,但它因巨大的 df
而崩溃。
为了减少它,我试图找到如何并行化所有 df_chunked
和每组 [df_chunked[0],df_chunked[1]],[df_chunked[2],df_chunked[3]]...,
运行 applyParallel(gr_data,detect_overlapping)
内部的解决方案。
问题:有没有什么办法可以用我描述的更好的方法来解决这个任务? 谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。