Это продолжение вопроса, который я задал здесь: Pandas - Частота подсчета значений за последние x дней
Я пытаюсь вместо того, чтобы получить посчитать последние x дней, я бы хотел, чтобы счетчик посмотрел на ID и посчитал, сколько раз он будет показан в x следующих днях. Так, например, сколько раз идентификатор A появляется в течение следующих 7 дней, начиная с указанной даты и времени подряд? Так что это похоже на обратный скользящий счет.
import pandas as pd
df = pd.DataFrame(
[['A', '2020-02-02 20:31:00'],
['A', '2020-02-03 00:52:00'],
['A', '2020-02-07 23:45:00'],
['A', '2020-02-08 13:19:00'],
['A', '2020-02-18 13:16:00'],
['A', '2020-02-27 12:16:00'],
['A', '2020-02-28 12:16:00'],
['B', '2020-02-07 18:57:00'],
['B', '2020-02-07 21:50:00'],
['B', '2020-02-12 19:03:00'],
['C', '2020-02-01 13:50:00'],
['C', '2020-02-11 15:50:00'],
['C', '2020-02-21 10:50:00']],
columns = ['ID', 'Date'])
df['Date'] = pd.to_datetime(df['Date'])
Желаемый результат:
ID Date count_in_next_7_days
0 A 2020-02-02 20:31:00 3
1 A 2020-02-03 00:52:00 2
2 A 2020-02-07 23:45:00 1
3 A 2020-02-08 13:19:00 0
4 A 2020-02-18 13:16:00 0
5 A 2020-02-27 12:16:00 1
6 A 2020-02-28 12:16:00 0
7 B 2020-02-07 18:57:00 2
8 B 2020-02-07 21:50:00 1
9 B 2020-02-12 19:03:00 0
10 C 2020-02-01 13:50:00 0
11 C 2020-02-11 15:50:00 0
12 C 2020-02-21 10:50:00 0
Вот как получить счет за предыдущие 7 дней windows. Я пробовал этот же код, но, прибегнув к дате в порядке убывания, подумал, что просто переключение порядка будет работать, но это не так. Так что я застрял в том, как заставить скользящее окно смотреть вперед на x дней, а не на x дней.
delta = 7
df = df[['ID','Date']]
df = (df.set_index('Date')
.assign(count_last=1)
.groupby('ID')
.rolling(f'{delta}D')
.sum() - 1).reset_index(drop=False)