Python Совокупная сумма по фрейму данных с условиями - PullRequest
0 голосов
/ 26 января 2019

У меня есть датафрейм, который выглядит так:

stuff datetime value
A 1/1/2019 3
A 1/2/2019 4
A 1/3/2019 5
A 1/4/2019 6
...

Я хочу создать новый фрейм данных, который выглядит следующим образом:

stuff avg_3 avg_4 avg_5
A 3.4 4.5 5.5
B 2.3 4.2 6.1

где avg_3 - среднее значение за последние 3 дня с сегодняшнего дня, avg_4 - среднее значение за последние 4 дня с сегодняшнего дня и т. Д., Сгруппированное по материалу

Как мне это сделать?

Мой текущий код:

df.groupby('stuff').apply(lambda x: pd.Series(dict(
    day_3=(x.datetime > datetime.now() - timedelta(days = 3)).mean(),
    day_7=(x.datetime > datetime.now() -timedelta(days = 7)).mean())))

Заранее спасибо

1 Ответ

0 голосов
/ 26 января 2019

Создайте логические маски до groupby, добавьте новые столбцы с помощью assign и groupby с помощью mean:

m1 = df.datetime >  pd.datetime.now() - pd.Timedelta(days = 3)
m2 = df.datetime >  pd.datetime.now() - pd.Timedelta(days = 7)

df = df.assign(day_3=m1, day_7=m2).groupby('stuff')['day_3','day_7'].mean()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...