首页 > 解决方案 > 有没有办法使用 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() 将我的数据帧分组到这个间隔中,所以如果有使用时间戳列的更简单和更快的解决方案,我很乐意阅读它。谢谢你。

标签: pythonpandasdataframegroup-bytimestamp

解决方案


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

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


推荐阅读