Python 如何并行化列绑定的函数?

Python 如何并行化列绑定的函数?,python,pandas,performance,parallel-processing,multiprocessing,Python,Pandas,Performance,Parallel Processing,Multiprocessing,我有一个函数,它对每个数据帧列执行一些操作,并从中提取一个较短的序列(在原始代码中,有一些耗时的计算正在进行) 然后在继续下一列之前将其添加到字典中 最后,它从字典中创建一个数据帧并操作其索引 如何并行化处理每个列的循环 这是一个不太复杂的可复制代码示例 import pandas as pd raw_df = pd.DataFrame({"A":[ 1.1 ]*100000, "B":[ 2.2 ]*100

我有一个函数,它对每个数据帧列执行一些操作,并从中提取一个较短的序列(在原始代码中,有一些耗时的计算正在进行) 然后在继续下一列之前将其添加到字典中

最后,它从字典中创建一个数据帧并操作其索引

如何并行化处理每个列的循环

这是一个不太复杂的可复制代码示例

import pandas as pd
raw_df = pd.DataFrame({"A":[ 1.1 ]*100000, 
                       "B":[ 2.2 ]*100000,
                       "C":[ 3.3 ]*100000})

def preprocess_columns(raw_df, ):
 
    df = {}
    width = 137 
 
    for name in raw_df.columns:
        '''
        Note: the operations in this loop do not have a deep sense and are just for illustration of the function preprocess_columns. In the original code there are ~ 50 lines of list comprehensions etc.
        '''


        # 3. do some column operations. (actually theres more than just this operation)
        seriesF =  raw_df[[name]].dropna()
        afterDropping_indices = seriesF.index.copy(deep=True) 
        list_ = list(raw_df[name])[width:]  
        df[name]=pd.Series(list_.copy(), index=afterDropping_indices[width:]) 
    
    
    # create df from dict and reindex
    df=pd.concat(df,axis=1) 
    df=df.reindex(df.index[::-1])
    return df 
 
raw_df = preprocess_columns(raw_df )
也许你可以用这个:

也许你可以用这个:



它看起来与df.drop((范围(宽度))的结果相同。@Johnny确实如此。为误会道歉。这段代码只是一个结构示例,用来指出并行化应该放在什么地方。你几乎把它破解了,也就是说,你可以把
df[name]
作为索引号传递给你的处理单元,并将它分发给你的处理单元(考虑到你的“做一些操作”是相互独立的)。如果您正在寻找通用的并行实现,那么值得寻找pandas@Gahan怎么做?我只是想不出如何使用mp.pool()实现这一点,它看起来与df.drop((范围(宽度))的结果相同。为误会道歉。这段代码只是一个结构示例,用来指出并行化应该放在什么地方。你几乎把它破解了,也就是说,你可以把
df[name]
作为索引号传递给你的处理单元,并将它分发给你的处理单元(考虑到你的“做一些操作”是相互独立的)。如果您正在寻找通用的并行实现,那么值得寻找pandas@Gahan怎么做?我只是想不出如何使用pandas_multiprocess的github上的mp.pool()实现这一点。github说,“这个函数通过多处理在输入数据帧的每一行上应用一个函数。”有没有办法对列实现这一点?@La Li Lu Le Loa
pandas-multiprocess.multiprocess.py行:156个任务。put(data.iloc[I,:])
我想你可以直接剪专栏和工作,我不明白你在说什么(英语只是我的第二语言)@La Li Lu Le Loa翻译软件决定了我的英语水平。我的回答通常不是很直接,你需要做点什么。那没问题,兄弟。所以问题是:我试图实现它,但我不知道如何使它适用于列。你能提供这个例子的工作代码吗?在pandas_multiprocess的github上,它说“这个函数通过多处理在输入数据帧的每一行上应用一个函数。”有没有办法对列这样做?@La Li Lu Le Loa
pandas-multiprocess.multiprocess.py行:156个任务。put(data.iloc[i,:])
我想你可以直接剪专栏和工作,我不明白你在说什么(英语只是我的第二语言)@La Li Lu Le Loa翻译软件决定了我的英语水平。我的回答通常不是很直接,你需要做点什么。那没问题,兄弟。所以问题是:我试图实现它,但我不知道如何使它适用于列。你能提供示例的工作代码吗?
pip install pandas-multiprocess
from pandas_multiprocess import multi_process


args = {'width': 137}
result = multi_process(func=func, data=df, num_process=8, **args)