Peut-être des pandas.
Ce que je veux, c'est avoir une fenêtre déroulante sur df et avoir toutes les colonnes de df disponibles dans la fenêtre pour faire divers calculs.
Je pense que le code ci-dessous est très proche de mes objectifs, mais j'ai du mal à comprendre le problème de l'index tel qu'il est énoncé dans le code.
Au début x.index = RangeIndex(start=0, stop=2, step=1), et tmp_df sélectionne correctement la première et la deuxième ligne dans df (index 0 et 1). Pour le dernier x.index = RangeIndex(start=4, stop=6, step=1), il semble qu'iloc essaie de sélectionner l'index 6 dans df qui est hors de portée (df a les index 0 à 5).
Qu'est-ce que je rate ?
Merci d'avance pour tout conseil.
import numpy as np
import pandas as pd
df = pd.DataFrame({'open': [7, 5, 10, 11,6,12],
'close': [6, 6, 11, 10,7,10],
'positive': [0, 1, 1, 0,1,0]},
)
def do_calculations_on_any_df_column_in_window(x,df):
print("index:",x.index)
tmp_df = df.iloc[x.index] # raises "ValueError: cannot set using a slice indexer with a different length than the value" when x.index = RangeIndex(start=4, stop=6, step=1) as df index goes from 0 to 5 only
# do calulations on any column in tmp_df, get result
result = 1 #dummyresult
return result
intervals = range(2, 10)
for i in intervals:
df['result_' + str(i)] = np.nan
res = df.rolling(i).apply(do_calculations_on_any_df_column_in_window, args=(df,), raw=False)
df['result_' + str(i)][1:] = res
print(df)