Это должно сработать
import pandas as pd
import numpy as np
size = 8
#This is to generate a random set, you can use your data instead of this
df = pd.DataFrame(
data=np.random.randint(1,10,(20,5)),
index=np.arange(20),
columns=['Time', 'GenA', 'GenB', 'GenC', 'Price']
)
max_size = df.shape[0]
for a in ['A','B','C']:
e = 'Gen' + a + '_W'
df[e] = np.empty(max_size)
for i in range(max_size-size):
df[e][i] = np.average(df['Price'][i:i+size], weights=df['Gen'+a][i:i+size])
Может быть, есть более «родной» для Панды способ сделать это, но я привык к тупому способу.Надеюсь, это поможет в любом случае