有效地扩展大熊猫的时间窗口分类



给定具有Timedelta索引的布尔数组,如何在现有True的某些Timedelta内制作任何样本,也True

另一种思考方式可能是:如何通过给定Timedelta"增长"布尔数组的True区域。

我目前的实现在下面工作正常,但很慢。

df["valid_region_extended"] = df.valid_region.copy()
extension_period = pd.Timedelta(seconds=0.01)
for index in df.valid_region.index:
window_start = index - extension_period
window_end = index + extension_period
if df.valid_region[window_start:window_end].any():
df.valid_region_extended[index] = True

假设索引是均匀分布的,你可以shift()布尔数组的两个方向并sum()它们:

df = pd.DataFrame({'valid': [False]*3+[True]+[False]*7+[True]*2+[False]*6+[True]}, index=pd.date_range('2021-01-01', '2021-01-20'))
pad = 2 # derive from Timedelta
df = df.assign(**{f'valid{n}': df.valid.shift(n) for n in range(-pad, pad+1)})
df['final'] = df.sum(axis=1).astype(bool)

原始与扩展:

valid  final
2021-01-01  False  False
2021-01-02  False   True
2021-01-03  False   True
2021-01-04   True   True
2021-01-05  False   True
2021-01-06  False   True
2021-01-07  False  False
2021-01-08  False  False
2021-01-09  False  False
2021-01-10  False   True
2021-01-11  False   True
2021-01-12   True   True
2021-01-13   True   True
2021-01-14  False   True
2021-01-15  False   True
2021-01-16  False  False
2021-01-17  False  False
2021-01-18  False   True
2021-01-19  False   True
2021-01-20   True   True

最新更新