【问题标题】:Time into duration/Session using Python使用 Python 进入持续时间/会话的时间
【发布时间】:2017-10-09 03:11:58
【问题描述】:

我有 1 个带有日期和时间的 pandas 数据框。我想再添加 1 个名为 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 - 更正了问题。对不起。现在它会有意义

标签: python pandas


【解决方案1】:

使用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 个分钟条件怎么办。
  • 您可以使用 .dt.hours.dt.mintutes 创建计算,然后创建 bin 以匹配该计算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2012-03-02
  • 2018-09-28
  • 2018-01-24
  • 2014-05-22
  • 2016-06-20
  • 1970-01-01
相关资源
最近更新 更多