Python 向数据帧添加缺少的时间窗口
我有以下数据帧Python 向数据帧添加缺少的时间窗口,python,pandas,dataframe,date,datetime,Python,Pandas,Dataframe,Date,Datetime,我有以下数据帧 doctets Duration Real First Packet 2013-02-04 15:45:00 456 64 2013-02-04 15:50:00 282111 56576 2013-02-04 16:00:00 271426 173632 2013-02-04 16:05:00 0 0 ..
doctets Duration
Real First Packet
2013-02-04 15:45:00 456 64
2013-02-04 15:50:00 282111 56576
2013-02-04 16:00:00 271426 173632
2013-02-04 16:05:00 0 0
... ... ...
2013-02-15 16:20:00 0 0
2013-02-15 16:25:00 0 0
2013-02-15 16:30:00 47255 6656
但是,我希望数据帧的日期在5分钟的窗口内始终在2013-02-04 8:00:00到2013-02-15 17:00:00之间丢失的窗口将始终具有“docets”0和“Duration”0。
我期望的输出如下所示:
doctets Duration
Real First Packet
2013-02-04 8:00:00 0 0
2013-02-04 8:05:00 0 0
... ... ...
2013-02-04 15:45:00 456 64
2013-02-04 15:50:00 282111 56576
2013-02-04 15:55:00 271426 173632
2013-02-04 16:00:00 0 0
... ... ...
2013-02-15 16:20:00 0 0
2013-02-15 16:25:00 0 0
2013-02-15 16:30:00 47255 6656
... ... ...
2013-02-15 16:55:00 0 0
2013-02-15 17:00:00 0 0
换言之,考虑到“真正的第一个数据包”是df中类型为“datetime64[ns]”的索引,我想用我想要的日期范围中缺少的日期填充数据帧 两种解决方案 解决方案1将现有df重新采样为5分钟频率,然后在开始和结束时间之间以5分钟频率重新为df编制索引
df = df.resample('5min').asfreq().reindex(pd.date_range('2013-02-04 8:00:00', '2013-02-15 17:00:00', freq='5 min')).fillna(0).astype(int)
解决方案2
用5分钟的频率对现有df重新取样
df = df.resample('5min').asfreq()
为所需日期范围创建新df,并将其与现有df合并
df = df.merge(
pd.date_range(start='2013-02-04 8:00:00',
end='2013-02-15 17:00:00',
freq='5min',name='Real First Packet').to_frame()\
.set_index('Real First Packet'),
left_index=True,
right_index=True,
how='right'
).fillna(0).astype(int)
最后7行的样本输出,即df.tail(7)
现有数据记录是否始终与给定的时间间隔对齐,如您的示例所示?假设一个“扩展”记录集会有一个2013-02-04 15:55:00“空值”条目?我修正了一些输入错误。是的,数据总是与我想要的时间间隔对齐。好吧,我想你可能也引入了一点混乱-有一个2013-02-04 16:00:00的有效条目变为空?我认为这只是一个最好的编辑错误,如果您接受答案,您可以选择向上投票(单击向上箭头),并通过单击勾号接受预期答案。
doctets Duration
RealFirstPacket
2013-02-15 16:30:00 47255 6656
2013-02-15 16:35:00 0 0
2013-02-15 16:40:00 0 0
2013-02-15 16:45:00 0 0
2013-02-15 16:50:00 0 0
2013-02-15 16:55:00 0 0
2013-02-15 17:00:00 0 0