У меня есть большой DataFrame с миллионами строк, и я хочу эффективно выполнить следующее сложное преобразование:
import pandas as pd
import numpy as np
np.random.seed(42)
data = pd.DataFrame({
"Category": np.random.choice(['A', 'B', 'C'], size=1000),
"SubCategory": np.random.choice(['X', 'Y', 'Z'], size=1000),
"Date": pd.date_range('2023-01-01', periods=1000),
"Value": np.random.randint(1, 100, size=1000),
"Flag": np.random.choice([True, False], size=1000)
})
Мне нужно:
Сгруппировать DataFrame по категориям и подкатегориям.
В каждой группе отсортировать строки по столбцу «Дата».Для каждой группы рассчитайте скользящую сумму столбца «Значение» с размером окна 7, но только для строк, где флаг имеет значение True`.
После расчета скользящей суммы отфильтруйте строки, в которых скользящая сумма равна ниже 50.
Верните результат в виде нового DataFrame с иерархической индексацией (Категория, Подкатегория) и оставшимися строками, отсортированными по дате.
Желаемый результат:
Новый DataFrame с:
A многоуровневый индекс категории и подкатегории.
Только строки, соответствующие критериям фильтрации (скользящая сумма > 50 для строк, в которых установлен флаг). Верно).
Скользящая сумма включена в новый столбец под названием RollingSum.
Я пробовал использовать комбинацию groupby(),rolling() и apply(), но У меня возникли проблемы:
Как обрабатывать условную логику для Флага в скользящем вычислении.
Как оптимизировать этот процесс для больших DataFrames (например, избегать чрезмерных циклов) .
Вот моя первая попытка, которая работает медленно и не справляется с условным прокатом должным образом:
def calc_rolling(group):
group = group.sort_values('Date')
group['RollingSum'] = (
group.loc[group['Flag'], 'Value']
.rolling(window=7, min_periods=1)
.sum()
)
return group[group['RollingSum'] > 50]
result = data.groupby(['Category', 'SubCategory']).apply(calc_rolling)
result.set_index(['Category', 'SubCategory'], inplace=True)
Подробнее здесь: https://stackoverflow.com/questions/792 ... -and-filte
Как эффективно выполнять условные скользящие агрегаты в Pandas с группировкой и фильтрацией результатов? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вложенные агрегаты Elasticsearch с данными Spring elasticsearch 5.2
Anonymous » » в форуме Elasticsearch aggregation - 0 Ответы
- 1097 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как подразделение рабочего шаблона соответствует ссылкам на новые агрегаты?
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-