У меня есть фрейм данных pandas, на котором я хочу выполнить некоторые скользящие вычисления.Это не простая формула, поэтому в ней нет ничего встроенного. Для целей минимального проверяемого полного примера, давайте предположим, что фрейм данных имеет вид.
df = pd.DataFrame({'a': [1.1, 2.1, 3.1, 4.1, 6.1, 8.1],
'b': [2.2, 3.2, 4.2, 5.2, 7.2, 9.2]})
, к которому я применяю следующее (опять-таки упрощенное для отладкии в иллюстративных целях).
def func(arr):
print(arr)
return 0
Печать (обр) должна видеть, что подается. Таким образом, я хочу взять скользящее окно размера 4 обоих столбцов а и b нав то же время.Таким образом, размеры массива должны быть 4 x 2.
Я пытался
df_res = df.rolling(window=4, center=False).apply(lambda x: func(x))
Печать (обр) дает
[ 1.1 2.1 3.1 4.1]
[ 2.1 3.1 4.1 6.1]
[ 3.1 4.1 6.1 8.1]
[ 2.2 3.2 4.2 5.2]
[ 3.2 4.2 5.2 7.2]
[ 4.2 5.2 7.2 9.2]
, а df_res дает
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 0.0 0.0
4 0.0 0.0
5 0.0 0.0
, который просто подает массив 4 x 1 для столбцов a и b отдельно.
Согласно этому ответу StackOverflow, применяет функцию к скользящему окну в Dataframe, где весь фрейм данных передается в функцию, советуем использовать min_periods и axis = 1.
df_res = df.rolling(window=4, min_periods=2, axis=1, center=False).apply(lambda x: func(x))
Но это тоже не то, что мне нужно.Печать (arr) дает.
[ 1.1 2.2]
[ 2.1 3.2]
[ 3.1 4.2]
[ 4.1 5.2]
[ 6.1 7.2]
[ 8.1 9.2]
, и df_res имеет форму
a b
0 NaN 0.0
1 NaN 0.0
2 NaN 0.0
3 NaN 0.0
4 NaN 0.0
5 NaN 0.0
Так что получилось так, что он подается в массив 2 x 1.Как я могу заставить панд делать скользящее окно размером 4 и по обоим столбцам так, чтобы в него входил массив 4 x 2?