У меня есть следующие данные, сгруппированные по идентификатору:
import pandas as pd
df_data = pd.DataFrame(data={'id': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
'period': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
'feature': [1, 5, 3, 4, 8, 10, 13, 12, 15, 19]})
df_weights = pd.DataFrame(data={'id': [1, 2],
'w1': [0.3, 0.25],
'w2': [0.15, 0.20]})
lags = [1, 2]
Мне нужно добавить новую функцию в df_data для каждого идентификатора:
def transform_feature(df, lags, feature, feature_new, weights):
df.loc[:, feature_new] = df[feature]
for i, lag in enumerate(lags):
df.loc[:, feature_new] = df.loc[:, feature_new] - df[feature].shift(lag) * weights[i]
return df
Я могу сделать это для одного идентификатора следующим образом:
id_tmp = 1
df_data_tmp = df_data[df_data['id'] == id_tmp]
weights = df_weights[['w1', 'w2']][df_weights['id'] == id_tmp].values.tolist()[0]
df_data_subset = transform_feature(df_data_tmp, lags, 'feature', 'feature_new', weights)
Как я могу выполнить эту операцию для всех идентификаторов (для всех df_data)?
Редактировать - ожидаемый результат:
import numpy as np
df_data = pd.DataFrame(data={'id': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
'period': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
'feature': [1, 5, 3, 4, 8, 10, 13, 12, 15, 19],
'feature_new': [np.nan, np.nan, 1.35, 2.35, 6.35, np.nan, np.nan, 6.75, 9.40, 12.85]})