python - 有没有办法使用 pandas 数据框来分割时间
问题描述
给定每行的时间戳,我试图以时间间隔拆分数据帧。例如,如果日期是 12/20/18 02:20:00,我希望能够创建一个新列并将其标记为 12am-6am。我正在尝试使用 .loc() 创建此列,但事实证明,拆分时间对我来说是一个挑战。尝试使用 between_time,将我的索引更改为时间戳,我还使用了 date_range 和 np.where()。
df1.loc[df1['Date'].date_range("0:00", "6:00").time, 'interval'] = '12am-6am'
甚至使用日期列:
df1['Date'].loc[df1['Date'].date_range("0:00", "6:00").time, 'interval'] = '12am-6am'
np.where() 似乎可以编译,但它没有给我正确的分类:
df1['new'] = np.where(df1.Date.dt.hour > 0, '12-6','nothing')
对于满足时间的行,它标记为“无”
我的总体目标是使用 group_by() 将我的数据帧分组到这个间隔中,所以如果有使用时间戳列的更简单和更快的解决方案,我很乐意阅读它。谢谢你。
解决方案
使用np.select
:
(np.select([df.Timestamp.dt.hour.ge(6) & df.Timestamp.dt.hour.le(12) & df[col].notnull(), df.Timestamp.dt.hour.ge(12) & df.Timestamp.dt.hour.le(18) & df[col].notnull()], ['M', 'A'], default='E'))
使用pd.cut
:
b = [6,12,18,24]
l = ['M', 'A','E']
pd.cut(df.Timestamp.dt.hour, bins=b, labels=l, include_lowest=True)
您可以根据需要修改代码。
推荐阅读
- regex - 正则表达式禁止撇号和连字符之前或之后的任何空格
- homebrew - 当存在相同版本的两个副本时,我应该如何覆盖/替换 nmap?
- ruby-on-rails - 为什么 ActiveSupport 核心扩展没有作为模块添加?
- python - 在没有 PIL 的 Python 中使用 tkinter 保存图像
- lean - 是否有解决此类琐碎目标的策略(精益定理证明)?
- javascript - MySQL的两个日期之间的进度条
- python - 尽管设置成功,但仍出现 Keras 和 PlaidML 错误
- java - Spring Boot 无法访问 REST 控制器
- python-3.x - 多处理/for循环随机跳过元素
- ios - 将 CloudKit Web Services 的身份验证流程与 Zapier 结合使用