python - 如何每隔 15 分钟标记一个 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
如您所见,“期间 1”包含 31/8/20 4:45 - 31/8/20 4:59:00 区间内的所有日期时间。如果该期间没有相应的行条目,则应该出现期间间隔。这就是为什么“第 4 期”不是“第 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 分钟内,则这会在“间隔”列中返回“期间 n”。
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
相反,我想用“期间”标记每一行,而不管前几行的日期时间如何,并且基于一个小时内的四个 15 分钟间隔,以便根据以下顺序依次标记期间
- dd/mm/yy h:45:00 - h:59:59,
- dd/mm/yy h:30:00 - h:44:59,
- dd/mm/yy h:15:00 - h:29:59,
- dd/mm/yy h:00:00 - h:14:59
先感谢您。
解决方案
使用DataFrame.groupby
onGrouper
频率为15min
,然后使用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
推荐阅读
- c# - 关于类的方法签名的 C# 问题
- r - 使用 R 从 Windows Cred Vault 获取凭据时出错
- visual-studio-2017 - Visual Studio 安装程序 15.8.28010.2036 停止在 97.55%
- android - 与文档相反,Android 位置更新过于频繁
- javascript - 遍历javascript对象问题
- php - 在 Laravel::Eloquent 表中,如何将模型设置为从视图中读取,但保存到表中?
- ruby-on-rails - Rails 服务器启动错误
- linux - 休眠过程,直到在 Go 中完成
- .net - 引导表设置标记为已检查的特定行的复选框
- android - 重用 ViewPropertyAnimator 对象的问题