Вы можете назначить два новых столбца, содержащие среднее и стандартное для предыдущих элементов. Здесь я предполагаю, что ваши данные временного ряда находятся в столбце «time_series_data»:
len_ = len(df)
df['mean_past'] = [np.mean(df['time_series_data'][0:lv+1]) for lv in range(len_)]
df['std_past'] = [np.std(df['time_series_data'][0:lv+1]) for lv in range(len_)]
df['z_score'] = (df['time_series_data'] - df['mean_past']) / df['std_past']
Редактировать : если вы хотите z-Score всех столбцов, вы можете определить функцию, который вычисляет z-показатель и применяет его ко всем столбцам вашего фрейма данных:
def z_score_column(column):
len_ = len(column)
mean = [np.mean(column[0:lv+1]) for lv in range(0,len_)]
std = [np.std(column[0:lv+1]) for lv in range(0,len_)]
return [(c-m)/s for c,m,s in zip(column, mean, std)]
df = pd.DataFrame(np.random.rand(10,5))
df.apply(z_score_column)