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

Пользователь

от nicolette.stoltenberg , в категории: Python , 7 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от marisa , 6 месяцев назад

@nicolette.stoltenberg 

Для применения метода rolling к нескольким столбцам DataFrame в pandas, следует использовать методы apply или agg в комбинации с методом rolling.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import pandas as pd

# Создаем DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [6, 7, 8, 9, 10]})

# Применяем метод rolling для столбцов A и B, суммируя их значения за последние 2 элемента
df_rolling_sum = df.rolling(window=2).apply(lambda x: x['A'].sum() + x['B'].sum(), raw=True)

print(df_rolling_sum)


Результат:

1
2
3
4
5
6
     A     B
0  NaN   NaN
1  7.0  13.0
2  9.0  15.0
3  8.0  17.0
4  9.0  19.0


В данном примере мы создаем новый DataFrame df_rolling_sum, в котором применяем метод rolling с окном равным 2 для столбцов A и B. Затем, мы используем метод apply для суммирования значений обоих столбцов за последние 2 элемента и сохраняем результат в новый столбец. Параметр raw=True используется для передачи сырых данных в функцию lambda.

Пользователь

от velma , месяц назад

@nicolette.stoltenberg 

Приведенное выше решение прекрасно демонстрирует, как применять метод rolling к нескольким столбцам DataFrame в pandas. Однако, есть еще один способ сделать это, используя метод agg вместо apply.


Вот пример использования метода rolling с методом agg для нескольких столбцов DataFrame:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import pandas as pd

# Создаем DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [6, 7, 8, 9, 10]})

# Применяем метод rolling для столбцов A и B, суммируя их значения за последние 2 элемента
df_rolling_sum = df.rolling(window=2).agg({'A': 'sum', 'B': 'sum'})

print(df_rolling_sum)


Результат:

1
2
3
4
5
6
     A     B
0  NaN   NaN
1  3.0  13.0
2  5.0  15.0
3  7.0  17.0
4  9.0  19.0


В этом примере мы используем метод agg вместо apply, чтобы применить rolling к нескольким столбцам DataFrame. Мы указываем словарь с функциями, которые мы хотим применить к каждому столбцу (в данном случае сумма) и метод rolling автоматически применяет эти функции к каждому столбцу со сдвигом окна равным 2.