[英]Calculating a rolling window of 8 hour size, using half hour increments in pandas
我有一個包含以下日期列的數據框:
schedule_departure_utc | run_id | |
---|---|---|
0 | 2021-01-11 13:07:00+00:00 | 13149 |
128 | 2021-01-11 13:07:00+00:00 | 38138 |
1 | 2021-01-11 13:37:00+00:00 | 13153 |
129 | 2021-01-11 13:37:00+00:00 | 38139 |
2 | 2021-01-11 18:07:00+00:00 | 951600 |
130 | 2021-01-11 18:07:00+00:00 | 951600 |
3 | 2021-01-11 18:22:00+00:00 | 951780 |
131 | 2021-01-11 18:22:00+00:00 | 951780 |
132 | 2021-01-11 18:26:00+00:00 | 951201 |
4 | 2021-01-11 18:37:00+00:00 | 951802 |
我想在此數據上移動 8 小時寬度的滾動 window,並計算該 window 中的出發次數。 唯一棘手的是我希望每半小時計算一次 window,例如,第一個 window 可能是從 00:00-08:00,然后是 00:30-08:30,然后是 01:00-09: 00 等
使用 pandas 我可以執行以下操作:
train_window = df.rolling('8h', on='scheduled_departure_utc').run_id.count()
然而,這給了我一個令人困惑的結果。 數據框如下所示:
run_id | |
---|---|
0 | 1 |
128 | 2 |
1 | 3 |
129 | 4 |
2 | 5 |
130 | 6 |
3 | 7 |
131 | 8 |
132 | 9 |
4 | 10 |
我曾希望有一個數據框,其索引是 8 小時開始時的日期時間 window,但索引是 integer,我不明白。 另外,因為我指定了8h
,我懷疑 window 是每 8 小時而不是每半小時計算一次,但我不確定。
如何計算與 window 大小不同的滾動 window 中的事件,然后如何以日期索引格式獲得結果?
我在 Python 3.9.1 和 pandas 1.2.0 上。
一種方法是首先對 dataframe resample
,使其具有與您想要的步長相同的頻率(在本例中為 30 分鍾)。 然后,您可以使用大小為 16(即 8 小時)的 window rolling
。
df['scheduled_departure_utc'] = pd.to_datetime(df['scheduled_departure_utc'])
df.set_index('scheduled_departure_utc').resample('30T').count()['run_id'].rolling(window=16, min_periods=1).sum()
產生的 pandas 系列:
2021-01-11 13:00:00 2.0
2021-01-11 13:30:00 4.0
2021-01-11 14:00:00 4.0
2021-01-11 14:30:00 4.0
2021-01-11 15:00:00 4.0
2021-01-11 15:30:00 4.0
2021-01-11 16:00:00 4.0
2021-01-11 16:30:00 4.0
2021-01-11 17:00:00 4.0
2021-01-11 17:30:00 4.0
2021-01-11 18:00:00 9.0
2021-01-11 18:30:00 10.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.