Чтобы исправить ваш код, вам нужно использовать f-строки, чтобы дать Python знать, что {var}
должно быть вставлено как его значение, а не строка "{var}"
.
for mode in modes:
df[f'{var}'] = df[f'{var}_x'] * df[f'{var}_y']
Но для получения «результата» потребуется дополнительный шаг суммы.
df['result'] = df[list(modes)].sum(axis=1)
Давайте вырезать дополнительный шаг и сделать это намного быстрее, используя здесь einsum
.Отфильтруйте столбцы _x
и _y
, а затем используйте einsum
, чтобы указать операцию суммы продуктов.
x = df.filter(like='_x')
y = df.filter(like='_y')
df['result'] = np.einsum('ij,ij->i', x, y)
Благодаря шагу filter
больше нетнужно больше поддерживать отдельный список modes
.