我正在处理一个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)
我该怎么做才能加快速度?
非常感谢。
答案 0 :(得分:0)
你能试试吗
df_raw_sort [variable_name_mean] = df_raw_sort [variable_name] .groupby(df_raw_sort ['ID'])。transform('mean')