【问题标题】:Is there a way to split time in intervals using pandas dataframe有没有办法使用 pandas 数据框来分割时间
【发布时间】:2021-06-20 08:57:39
【问题描述】:

给定每行的时间戳,我正在尝试按时间间隔拆分数据帧。例如,如果日期是 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() 将我的数据帧分组到这个间隔中,所以如果有使用时间戳列的更简单和更快的解决方案,我很乐意阅读它。谢谢。

【问题讨论】:

    标签: python pandas dataframe group-by timestamp


    【解决方案1】:

    使用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)
    

    您可以根据需要修改代码。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 1970-01-01
      • 2022-06-29
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2022-01-03
      相关资源
      最近更新 更多