【发布时间】:2020-07-13 10:43:25
【问题描述】:
这是对我在这里提出的问题的跟进:Pandas - Count frequency of value for last x amount of days
我试图而不是在过去 x 天中计数,我希望计数查看 ID,并计算它在接下来的 x 天中显示的次数。例如,从给定的日期时间开始,ID 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 天窗口计数的方法。我已经尝试过相同的代码,但是在按日期降序排列之后,我认为只需切换顺序就可以了,但事实并非如此。所以我被困在如何让滚动窗口向前 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)
【问题讨论】:
-
有点吹毛求疵:问题中的条件是
show up in the next 7 days,预期结果列名称是count_in_last_7_days -
啊,很好。我会改变的
标签: python pandas datetime rolling-computation