我有一个开始和结束时间戳的数据帧,如下所示:
Start End
0 2019-01-01 00:59 2019-01-01 01:01
1 2019-01-01 01:10 2019-01-01 03:10
我想按小时划分时段(也就是说,如果时段从18:59开始到19:05结束,我们将有两个新行,一个从18:59开始到19:00结束,另一个从19:00开始到19:05结束)。我的示例数据帧的输出是:
Start End
0 2019-01-01 00:59 2019-01-01 01:00
1 2019-01-01 01:00 2019-01-01 01:01
2 2019-01-01 01:10 2019-01-01 02:00
3 2019-01-01 02:00 2019-01-01 03:00
4 2019-01-01 03:00 2019-01-01 03:10
我已经尝试了一些使用dt.ceil和dt.floor方法的方法来确定是否需要中断一行,但是如果不逐行循环,我无法找到一种平滑的方法来完成整个转换
可以使用以下代码段生成数据帧:
start = pd.DataFrame({
'Start': ['2019-01-01 00:59', '2019-01-01 01:10'],
'End': ['2019-01-01 01:01', '2019-01-01 03:10']
})
finish = pd.DataFrame({
'Start': ['2019-01-01 00:59', '2019-01-01 01:00', '2019-01-01 01:10', '2019-01-01 02:00', '2019-01-01 03:00'],
'End': ['2019-01-01 01:00', '2019-01-01 01:01', '2019-01-01 02:00', '2019-01-01 03:00', '2019-01-01 03:10']
})
使用listcomp,
pd.date_range
并从date_range
的结果构造序列s
。最后,从s
构造最终的df
如果希望输出
Start
和End
为字符串格式,只需添加strftime
注意:如果您的pandas版本不支持
explode
,您可以使用df.index.repeat
和np.concatenate
来创建s
相关问题 更多 >
编程相关推荐