我有以下数据框
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
但是,我希望我的数据框的日期始终在 2013-02-04 8:00:00 到 2013-02-15 17:00:00 的 5 分钟窗口内。 丢失的窗口将始终具有 'doctets' 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
换句话说,我想用所需日期范围内的缺失日期填充数据框
答案 0 :(得分:0)
查看您的输入,考虑到 'Real First Packet' 是 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)
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