【发布时间】:2020-11-18 13:36:00
【问题描述】:
我有一个带有数百万个时间戳索引的 df,它保持频繁的标记 (例如,每 5 分钟一次)
但有洞。
(= 一些理想顺序的时间戳丢失,甚至可能在整个数据帧中,
例如,“20:05:00”可能永远不会出现,尽管它的邻居“20:00:00”和“20:10:00”可能存在。)。
.
我需要解决那些“漏洞”。但仅限于特定的早间和特定的晚间。
Time Vals
2019-06-17 08:45:00 NaN
2019-06-17 08:50:00 NaN
2019-06-17 08:55:00 NaN
2019-06-17 09:00:00 NaN
2019-06-17 09:05:00 NaN
2019-06-17 09:10:00 NaN
2019-06-17 09:15:00 NaN
2019-06-17 09:20:00 NaN
2019-06-17 09:25:00 NaN
2019-06-17 09:30:00 NaN
2019-06-17 09:35:00 NaN
2019-06-17 09:40:00 NaN
2019-06-17 09:45:00 NaN
2019-06-17 09:50:00 NaN
2019-06-17 09:55:00 NaN
2019-06-17 10:00:00 NaN
2019-06-17 10:05:00 NaN
2019-06-17 10:10:00 NaN
2019-06-17 10:15:00 NaN
2019-06-17 10:20:00 NaN
... ...
... ...
... ...
Name: Vals, dtype: float64
可以通过以下方式获取白天的早点和晚点:
df.index = pd.MultiIndex.from_tuples(zip(X.index.date,X.index.time))
# get unique times
dates = X.index.get_level_values(0).unique()
times = X.index.get_level_values(1).unique()
early_daytime = times.min
late_daytime = times.max
# back to original index format: reduce MultiIndex to 1D datetime index, sort
X.index = [datetime.combine(date,time) for date,time in X.index.values]
X = X.sort_index()
假设伪频率为 5 分钟。
我怎样才能获得每个“以 5 分钟为单位”的缺失时间戳包含在“日期”和“early_daytime”和“late_daytime”之间的每一天强>?
注意:变量 "times" 或 index 不能不包含应包含在5分钟的频繁顺序。 (= 我之前提到的孔)
有没有办法有效地做到这一点(因为行数很大)?
编辑:这是一个与之前不同的问题,所以如果不仔细阅读,请不要关闭它。
编辑: 当我每个工作日都有特定的早间和特定的晚间时如何应用它?
(这可以通过再次拆分为多索引来完成,然后选择最早和最晚日期,{步骤我不知道如何集成},然后在循环结束时合并结果时间索引。)但是如何将这一步整合到弯曲的括号中? 我还没有在我的样本上测试它,但@Rob Raymond 的建议可能是我不知道如何融入工作日方法的步骤......
dfse = pd.DataFrame({"DATE":pd.date_range(start=datetime(2020,7,24),end=datetime(2020,7,25), freq="5min")})\
.merge(dfgaps, how="left").loc[lambda df: df["value"].isna()]
【问题讨论】:
标签: python pandas dataframe datetime time