【发布时间】:2022-01-01 14:42:17
【问题描述】:
我的脚本如下
import pandas as pd
df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3']})
def make_df(year):
df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], str(year): [str(year), str(year+1), str(year+2), str(year+3)]})
return df
for year in range(2020, 2015, -1):
df = pd.merge(df, make_df(year), on=['key'], how='left')
最终的 df 将是..
key A 2020 2019 2018 2017 2016
0 K0 A0 2020 2019 2018 2017 2016
1 K1 A1 2021 2020 2019 2018 2017
2 K2 A2 2022 2021 2020 2019 2018
3 K3 A3 2023 2022 2021 2020 2019
我的实际make_new_df(year) 要复杂得多,而且需要太多时间。
如何并行化 for 循环 for year in range(2020, 2015, -1): 并缩短处理时间?
【问题讨论】:
-
您可以尝试使用标准模块
threading、multiprocessing或ray、joblib、pyspark等外部模块,这些模块可能对DataFrame有一些功能。甚至可能还有一个我不记得名字的模块 -pandas-???- 它可以将多处理添加到DataFrame -
感谢您的评论。我尝试了一些模块,如 multiprocessing 或 dask,但未能使用它们。我找不到任何解释使用它们的详细方法的文件。我所发现的只是关于一个数据帧中的多处理,而不是关于将多个数据帧合并为一个。你有什么推荐的文件吗?
-
您可以在分离的线程/进程中生成新数据,但稍后您必须将它们加入主进程。
-
其他想法:在Google Colab服务器上发送数据,运行代码并下载结果可能会更快:)
标签: python pandas dataframe parallel-processing