如何每隔 15 分钟标记一个 Pandas 日期时间行(在新列中)?

How do I label a Pandas datetime row (in a new column) for every 15 minute interval?

我有一个 pandas 数据框,看起来像这样:

Date
31/8/20 4:56:00
31/8/20 4:45:00
31/8/20 4:39:00
31/8/20 4:36:00
31/8/20 4:34:00
31/8/20 4:05:00
31/8/20 4:04:00
31/8/20 3:19:00
31/8/20 2:54:00

我希望它以 15 分钟为基础对行进行分组,并在每行属于 15 分钟日期时间类别时对其进行标记。所以我希望我的输出看起来像这样:

Date              Interval
31/8/20 4:56:00   Period 1
31/8/20 4:45:00   Period 1
31/8/20 4:39:00   Period 2
31/8/20 4:36:00   Period 2
31/8/20 4:34:00   Period 2
31/8/20 4:05:00   Period 4
31/8/20 4:04:00   Period 4
31/8/20 3:19:00   Period 7
31/8/20 2:54:00   Period 9

如您所见,'Period 1' 包含 31/8/20 4:45 - 31/8/20 4:59:00 区间内的所有日期时间。如果该期间没有相应的行条目,则应出现期间间隙。这就是为什么 'Period 4' 不是 'Period 3'

我试过以下方法:

df = pd.DataFrame()
df = df.sort_values(by=['Date'], ascending=False)
df['Date'] = pd.to_datetime(df['Date'])
df['Interval'] = 'Period ' + (((df.shift()['Date'] - df['Date']).dt.seconds > 900).cumsum() + 1).astype(str)

但是,如果日期时间行在前一个日期时间行的 15 分钟内,则 returns 'Period n' 在 'Interval' 列中。

Date              Interval
31/8/20 4:56:00   Period 1
31/8/20 4:45:00   Period 2
31/8/20 4:39:00   Period 3
31/8/20 4:36:00   Period 4
31/8/20 4:34:00   Period 5
31/8/20 4:05:00   Period 6
31/8/20 4:04:00   Period 7
31/8/20 3:19:00   Period 8
31/8/20 2:54:00   Period 9

我想用 'Period' 标记每一行,而不考虑前几行的日期时间,并基于一小时内的四个 15 分钟间隔,以便根据

按顺序标记周期

提前致谢。

使用 DataFrame.groupby on Grouper with frequency of 15min, then use groupby.ngroup 和可选参数 ascending=False 为每个组编号:

s = df.groupby(pd.Grouper(freq='15min', key='Date')).ngroup(ascending=False).add(1)
df['Interval'] = 'Period ' + s.astype(str)

结果:

                 Date  Interval
0 2020-08-31 04:56:00  Period 1
1 2020-08-31 04:45:00  Period 1
2 2020-08-31 04:39:00  Period 2
3 2020-08-31 04:36:00  Period 2
4 2020-08-31 04:34:00  Period 2
5 2020-08-31 04:05:00  Period 4
6 2020-08-31 04:04:00  Period 4
7 2020-08-31 03:19:00  Period 7
8 2020-08-31 02:54:00  Period 9