我有一个包含时间序列数据的DataFrame。我正在研究一个分析CGM数据的项目,该数据试图估算血糖。 我正在使用的传感器有时不会记录一些数据,即CSV缺少我在应用程序屏幕上未观察到的值(它似乎一直是连续的,我正在佩戴传感器)。 此时间序列的理论周期为 5分钟。但是,有时我们会很不规则地记录数据,如下图所示。
我想处理我的数据,以便插值并填充时间序列的某些窗口。
datetime.timedelta(minutes=30)
作为图片
作为熊猫可读的虚拟示例
Sensor Glucose (mg/dL) ISIG Value
DateTime
2020-03-16 16:31:00 116.0 17.60
2020-03-16 16:36:00 110.0 16.26
2020-03-16 16:41:00 112.0 18.66
2020-03-16 16:46:00 121.0 21.86
2020-03-16 16:51:00 124.0 20.67
2020-03-16 16:56:00 NaN NaN
2020-03-16 17:00:00 NaN NaN
2020-03-16 17:01:00 116.0 15.86
2020-03-16 17:06:00 108.0 14.99
2020-03-16 17:11:00 108.0 17.43
2020-03-16 17:16:00 104.0 15.42
2020-03-16 17:21:00 103.0 16.49
2020-03-16 17:26:00 108.0 18.83
2020-03-16 17:31:00 104.0 15.18
2020-03-16 17:36:00 106.0 18.06
2020-03-16 17:39:00 NaN NaN
2020-03-16 17:41:00 110.0 19.49
2020-03-16 17:46:00 114.0 20.13
2020-03-16 17:51:00 121.0 21.27
2020-03-16 17:52:00 NaN NaN
2020-03-16 17:57:00 NaN NaN
2020-03-16 17:58:00 NaN NaN
2020-03-16 18:00:00 NaN NaN
2020-03-16 19:00:00 NaN NaN
2020-03-16 19:12:00 NaN NaN
2020-03-16 19:13:00 NaN NaN
2020-03-16 19:30:00 127.0 NaN
2020-03-16 19:35:00 129.0 NaN
2020-03-16 19:40:00 134.0 NaN
2020-03-16 19:45:00 NaN NaN
2020-03-16 19:50:00 NaN NaN
2020-03-16 19:55:00 NaN NaN
2020-03-16 20:00:00 NaN NaN
2020-03-16 20:05:00 NaN NaN
2020-03-16 20:10:00 NaN NaN
2020-03-16 20:15:00 NaN NaN
2020-03-16 20:20:00 NaN NaN
2020-03-16 20:25:00 NaN NaN
2020-03-16 20:30:00 NaN NaN
2020-03-16 20:35:00 NaN NaN
2020-03-16 20:40:00 NaN NaN
2020-03-16 20:45:00 NaN NaN
2020-03-16 20:50:00 120.0 NaN
例如,在这里,我想插值NaN
的第一个和第二个出现,但由于窗口太大,所以不插值第三个或第四个出现。
我认为同时存在两个问题:
pd.infer_freq(df.index)
的结果之一None
。NaN
。我想通过插值来填充这些缺失的值,当时间窗口大于某个值时,我不想填充空白空间,因为从生理学角度来看这不再有效(永远不会存在严格的线性或二次行为2小时,但可以肯定地说,这种现象在1分钟的时间范围内是线性的)我知道上采样非常简单,只需一根线即可:
new_df = df.resample("1T").asfreq()
df.index.to_series().diff(1) > dt.timedelta(minutes=45)
如果所有规则间隔的日志都包含有效的葡萄糖条目,但是其中许多具有NaN
,这将有助于解决问题。
我知道pd.DataFrame.groupby
是可行的方法,尽管如此,我对使用此功能还是一无所知。