You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何并行化Pandas中的循环操作以提升计算效率?

并行化实现方案

核心思路

针对你代码里串行执行转换任务的问题,用Python的concurrent.futures.ThreadPoolExecutor就能实现并行处理——你的任务主要是time.sleep这类IO等待操作,线程池开销比进程池更低,能让所有任务同时执行,且最终输出的merged_df和原代码完全一致。

修改后的完整代码

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import time
from concurrent.futures import ThreadPoolExecutor

# 生成未来一年的日期范围
start_date = datetime.now()
end_date = start_date + timedelta(days=365)
date_range = pd.date_range(start=start_date, end=end_date, freq='D')

# 生成时间序列的随机整数值
num_days = len(date_range)
random_values = np.random.randint(low=0, high=100, size=num_days)

# 创建DataFrame
data = {'Date': date_range, 'Value': random_values}
df = pd.DataFrame(data)

def transform_dataframe(task_args):
    # 适配线程池参数传递规则,接收元组形式的参数
    df_copy, mult, pow_val, setname = task_args
    time.sleep(2)  # 原代码的2000秒应为笔误,改为2秒方便测试,实际可改回原数值
    df_copy['value_mult'] = df_copy['Value'] * mult
    df_copy['value_pow'] = df_copy['Value'] ** pow_val
    df_copy = df_copy[['Date', 'value_mult', 'value_pow']]
    df_copy.rename(columns={'value_mult': f'{setname}_value_mult', 'value_pow': f'{setname}_value_pow'}, inplace=True)
    return df_copy, setname

transforms = [(2, 3, 'set1'),
              (0.5, 2, 'set2'),
              (3, 0.5, 'set3'),
              (1.5, 2.5, 'set4')]

# 准备任务参数:每个任务传入独立的df副本,避免并发数据冲突
task_list = [(df.copy(), mult, pow_val, setname) for mult, pow_val, setname in transforms]

# 并行执行所有转换任务
transformed_dfs = []
with ThreadPoolExecutor(max_workers=len(transforms)) as executor:
    # map方法会保持结果顺序和任务提交顺序一致,和原串行逻辑完全匹配
    for result in executor.map(transform_dataframe, task_list):
        transformed_df, _ = result
        transformed_dfs.append(transformed_df)

# 合并结果,生成和原代码结构相同的merged_df
merged_df = pd.concat(transformed_dfs, keys=[f'{setname} Transform' for _, _, setname in transforms])

关键细节说明

  • 参数适配:调整transform_dataframe函数接收单参数元组,适配ThreadPoolExecutor.map的参数传递规则
  • 并发安全:每个任务传入df.copy(),确保多线程操作独立的DataFrame副本,避免数据冲突
  • 顺序保证:executor.map按任务提交顺序返回结果,最终merged_df的结构和原串行代码完全一致
  • 线程数设置:将max_workers设为任务总数(4个),确保所有任务可同时启动执行

内容的提问来源于stack exchange,提问作者r ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:20:31