将时间序列数据拆分为一行中的时间间隔(PythonicWay) - 每小时

时间:2017-07-14 17:35:01

标签: python pandas

我有一个包含时间列的分钟数据。我想使用日期时间格式hours创建新列,例如format ='%Y-%m-%d %H:%M:%S'。我知道在R中,我们可以使用类似的东西,

value$hour<- cut(as.POSIXct(paste(value$time),
                          format="%Y-%m-%d %H:%M:%S"), breaks="hour")

当我这样做时,我得到以下输出,(我需要)

time                 hour
2017-02-10 00:00:00  2017-02-10 00:00:00
2017-02-10 00:01:00  2017-02-10 00:00:00
2017-02-10 00:02:00  2017-02-10 00:00:00
2017-02-10 00:03:00  2017-02-10 00:00:00
....
2017-12-1 10:05:00   2017-12-01 10:00:00
2017-12-1 10:06:00   2017-12-01 10:00:00

我也知道有很多线程讨论dt.datedt.hour等。我可以在python中执行以下操作,

value['date'] = value['time'].dt.date
value['hour'] = value['time'].dt.hour

我有什么方法可以在python中做到与上面提到的R类似的一行? 任何想法将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您需要dt.floor

df['hour'] = df['time'].dt.floor('H')
print (df)
                 time                hour
0 2017-02-10 00:00:00 2017-02-10 00:00:00
1 2017-02-10 00:01:00 2017-02-10 00:00:00
2 2017-02-10 00:02:00 2017-02-10 00:00:00
3 2017-02-10 00:03:00 2017-02-10 00:00:00
4 2017-12-01 10:05:00 2017-12-01 10:00:00
5 2017-12-01 10:06:00 2017-12-01 10:00:00

如果需要转换为datetimetime,请添加to_datetime

df['hour'] = pd.to_datetime(df['time']).dt.floor('H')
print (df)
                  time                hour
0  2017-02-10 00:00:00 2017-02-10 00:00:00
1  2017-02-10 00:01:00 2017-02-10 00:00:00
2  2017-02-10 00:02:00 2017-02-10 00:00:00
3  2017-02-10 00:03:00 2017-02-10 00:00:00
4   2017-12-1 10:05:00 2017-12-01 10:00:00
5   2017-12-1 10:06:00 2017-12-01 10:00:00