用Python将时间转换为持续时间/会话

3

我有一个带有日期和时间的pandas数据框。我想添加一个名为“session”的列,其值为早上、下午、晚上和夜晚。

   Time
   2016-07-10 01:18:00
   2016-07-10 11:21:00
   2016-07-10 17:29:00
   2016-07-10 21:43:00

我希望得到类似于以下输出的结果:
   Time                     Session
   2016-07-10 01:18:00      Night
   2016-07-10 11:21:00      Morning
   2016-07-10 17:29:00      Afternoon
   2016-07-10 21:43:00      Evening

如何实现这个?我尝试通过定义断行来实现。
00:00 - 06:00 Night
06:00 - 12:00 Morning
12:00 - 18:00 Afternoon
18:00 -23:59 Evening


df.Time[(df.Time.dt.hour < 6) | (df.Time.dt.hour > 0) | (df.Time.dt.minute < 59) | (df.Time.dt.minute > 0)] = "Night"

但它没有正常工作。提前感谢。


你的2016-07-10 05:26:00怎么是下午而不是上午?没有AM PM标识,也没有24小时制。这是按顺序排列的吗? - Scott Boston
@Scott Boston - 我修改了问题。抱歉。现在应该有意义了。 - Ajay jadhav
1个回答

10

使用pd.cut创建会话标签的区间。

df.assign(session=pd.cut(df.Time.dt.hour,[0,6,12,18,24],labels=['Night','Morning','Afternoon','Evening']))

输出:

                 Time    session
0 2016-07-10 01:18:00      Night
1 2016-07-10 11:21:00    Morning
2 2016-07-10 17:29:00  Afternoon
3 2016-07-10 21:43:00    Evening

谢谢@Scott Boston,它正常工作了。但是这仅基于小时,如果我想要1分钟的另一个条件呢? - Ajay jadhav
1
你可以使用.dt.hours.dt.minutes来进行计算,然后创建相应的区间来匹配这个计算结果。 - Scott Boston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接