如何加快大数据集中的两个嵌套for循环

时间:2018-09-17 08:15:49

标签: python performance loops for-loop parallel-processing

我正在处理一个600.000 x 128数据集,该数据集以以下形式排列并带有层次结构索引(见左图):

                    Var1     Var2     ...                                     Var1_mean  Var2_mean     ...          
    ID     Date                                               ID     Date          
    1      2017-12  1        0.1                              1      2017-12  2          0.3
    1      2018-01  2        0.3                              1      2018-01  2          0.3
    1      2018-02  3        0.5            -->               1      2018-02  2          0.3
    2      2018-01  2        0.2                              2      2018-01  3          0.15
    2      2018-02  4        0.1                              2      2018-02  3          0.15

现在,对于所有55.000个客户(=唯一ID),我想用存储在新变量(变量名称+'_mean',请参见右图)中的每个客户的平均值替换所选变量中每个客户的值。

我编写了一个函数来执行此操作,但是即使尝试并行执行任务,也要花费4个小时以上。我尝试过:

    identifiers = set(df_raw_sort.index.get_level_values(0)) # unique IDs

    def avg_per_customer(column): 
       df_raw_sort.loc[:, column + '_mean'] = 0 # Create new col
       for unique in identifiers: 
          meanvalue = np.mean(df_raw_sort[column].loc[(unique)])
          df_raw_sort.loc[(unique), column + '_mean'] = meanvalue

    Parallel(n_jobs=2, verbose=10)(delayed(avg_per_customer)(col) for col in transform)
    # transforms selected columns (= transform)

我该怎么做才能加快速度?

非常感谢。

1 个答案:

答案 0 :(得分:0)

你能试试吗

  

df_raw_sort [variable_name_mean] = df_raw_sort [variable_name] .groupby(df_raw_sort ['ID'])。transform('mean')

Referred answer from here