我正在对包含多个ID的时间序列数据集的已排序数据集'df_post_decay
'进行以下操作,我想为每个ID转换我的'demean_variables
'变量。
为id(i)和时间(t1)转换的战术变量''dm_'+var
'创建的变量将是:
{(策略)-(ID(i)的所有行的均值(tactic))-(时间(t1)的所有行的均值(tactic))+(整个策略列的均值(tactic) )}
time_col = 'mnth'
demean_variables =['overall_details','speaker_total','overall_samples_eu','copay_redemption_count','voucher_redemption_count','dtc']
df_post_demean['key'] = 1
for var in demean_variables:
df_post_demean['dm_'+var] = df_post_demean[var] - df_post_demean.groupby(id_col)[var].transform(np.mean) - df_post_demean.groupby(time_col)[var].transform(np.mean) + df_post_demean.groupby('key')[var].transform(np.mean)
del df_post_demean[var]
print(sum(df_post_demean['dm_'+var]))
del df_post_demean['key']
我想优化此部分代码,因为它需要超过10分钟才能处理数据集中500万以上的行。
请找到数据集'df_post_decay'
的样本
ID mnth overall_details speaker_total overall_samples_eu copay_redemption_count voucher_redemption_count dtc
1 201701 3 1 10 9 3 6
1 201702 6 1 0 7 7 10
1 201703 10 8 7 8 9 10
1 201704 3 9 3 0 1 1
1 201705 9 0 8 9 6 4
1 201706 8 3 2 10 8 9
1 201707 3 10 3 0 5 6
1 201708 2 10 3 9 6 2
1 201709 1 3 7 10 8 0
1 201710 3 8 2 8 0 10
1 201711 6 7 4 8 5 6
1 201712 3 8 2 9 4 10
2 201701 7 4 7 4 10 2
2 201702 10 0 2 2 10 5
2 201703 10 6 4 10 5 3
2 201704 4 3 6 4 0 8
2 201705 7 8 9 10 6 10
2 201706 8 0 2 7 1 8
2 201707 10 2 8 1 9 4
2 201708 10 6 7 0 3 5
2 201709 10 10 3 8 9 0
2 201710 2 0 3 5 5 8
2 201711 1 8 0 7 3 4
2 201712 8 5 1 0 7 9
3 201701 2 2 7 7 1 2
3 201702 2 8 10 9 6 9
3 201703 10 5 8 5 9 4
3 201704 6 1 2 4 6 2
3 201705 6 9 4 4 3 0
3 201706 5 1 6 4 1 7
3 201707 0 7 6 9 5 6
3 201708 10 3 2 0 4 5
3 201709 5 8 6 4 10 4
3 201710 8 3 10 6 7 0
3 201711 7 5 6 3 1 10
3 201712 3 9 8 4 10 0
答案 0 :(得分:0)
您是否曾经看过BLAS / LAPACK之类的东西。该库是为编译器中的线性代数运算而构建的。通过BLAS / LAPACK尝试这些操作。要将其设置为Python,请查看以下内容:
您可以检查here BLAS为何重要?