Панды прокатки применяются: пройти в двумерном массиве - PullRequest
0 голосов
/ 10 июня 2018

У меня есть фрейм данных 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...