Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Как в pandas применить метод rolling к нескольким столбцам DataFrame?

#python #python_3x #pandas #dataframe


Подскажите, как правильнее скользящим окном пройтись по датафрейму для нескольких
столбцов? Окно например 3х3.

Я хочу вычислять максимум из значений попадающих в это окно и записать их в новый
столбец. Вот мой код в несколько действий:

x = pd.Series([1, 4, 3, 2, 1, 6, 2, 8, 3, 0, 1, 2, 1, 5])

df = pd.DataFrame({"A": x**2+8, "B": x*8, "C": x+34})
df[['maxA','maxB','maxC']]  = df.loc[:,'A':'C'].rolling(3).max()
df['Max_ABC']  = df.loc[:,['maxA','maxB','maxC']].max(axis=1)

df


Сейчас я использую промежуточное вычисление как на рисунке, используя столбцы ['maxA','maxB','maxC']
только для получения промежуточного результата. Мне видится что это лишний шаг вычисления,
и наверное есть более простой способ решения.


Знаете ли более пандовский метод для работы со скользящим окном, чтобы получить сразу
нужный столбец как на рисунке ниже?


    


Ответы

Ответ 1



In [46]: df['Max_ABC'] = df[['A','B','C']].rolling(3).max().max(axis='columns') In [47]: df Out[47]: A B C Max_ABC 0 9 8 35 NaN 1 12 16 36 NaN 2 17 24 37 37.0 3 24 32 38 38.0 4 33 40 39 40.0 5 44 48 40 48.0 6 57 56 41 57.0 7 72 64 42 72.0 Пояснение: df[['A','B','C']].rolling(3).max() - возвращает максимумы в скользящем окне для всех указанных столбцов: In [51]: df[['A','B','C']].rolling(3).max() Out[51]: A B C 0 NaN NaN NaN 1 NaN NaN NaN 2 17.0 24.0 37.0 3 24.0 32.0 38.0 4 33.0 40.0 39.0 5 44.0 48.0 40.0 6 57.0 56.0 41.0 7 72.0 64.0 42.0 далее мы выбираем максимум для каждой строки, указав axis='columns': In [52]: df[['A','B','C']].rolling(3).max().max(axis='columns') Out[52]: 0 NaN 1 NaN 2 37.0 3 38.0 4 40.0 5 48.0 6 57.0 7 72.0 dtype: float64

Комментариев нет:

Отправить комментарий