You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按缺失数据块拆分DataFrame并按需插值?

处理带时间序列的DataFrame:按时间间隙拆分并插值

问题背景

我有一个带时间序列索引的DataFrame,包含数千行数据,但存在部分缺失值,示例数据如下:

A
2023-03-18 05:00:00 3.0
2023-03-18 06:00:00 4.0
2023-03-18 07:00:00 24.4
2023-03-18 12:00:00 5.6
2023-03-18 13:00:00 3.4
2023-03-18 15:00:00 4.5
2023-03-18 20:00:00 8.8
2023-03-18 21:00:00 3.2

原本我想把数据转为小时粒度,用resample()(或reindex())结合interpolate()插值缺失值,代码如下:

df = df.resample("1h").first()    
df = df.interpolate(method="time")
df

执行后得到:

A
2023-03-18 05:00:00 3.00
2023-03-18 06:00:00 4.00
2023-03-18 07:00:00 24.40
2023-03-18 08:00:00 20.64
2023-03-18 09:00:00 16.88
2023-03-18 10:00:00 13.12
2023-03-18 11:00:00 9.36
2023-03-18 12:00:00 5.60
2023-03-18 13:00:00 3.40
2023-03-18 14:00:00 3.95
2023-03-18 15:00:00 4.50
2023-03-18 16:00:00 5.36
2023-03-18 17:00:00 6.22
2023-03-18 18:00:00 7.08
2023-03-18 19:00:00 7.94
2023-03-18 20:00:00 8.80
2023-03-18 21:00:00 3.20

当前需求

但我不想对超过3小时的大间隙进行插值,而是希望在这些大间隙处拆分DataFrame,最终得到多个DataFrame。预期结果是3个DataFrame:

第一个:

A
2023-03-18 05:00:00 3.00
2023-03-18 06:00:00 4.00
2023-03-18 07:00:00 24.40

第二个:

A
2023-03-18 12:00:00 5.60
2023-03-18 13:00:00 3.40
2023-03-18 14:00:00 3.95
2023-03-18 15:00:00 4.50

第三个:

A
2023-03-18 20:00:00 8.80
2023-03-18 21:00:00 3.20

思路补充

我的思路是寻找能对布尔序列进行连续逻辑处理的便捷函数。假设有布尔序列:
[True, False, True, False, False, False, False, True, True, False, False, True]
我希望生成如下序列:
[True, True, True, False, False, False, False, True, True, True, True, True]
也就是仅保留连续3个以上False对应的False值。

第一个布尔序列可通过以下代码获取:

~df.resample('1h').first().isnull().any(axis=1)

最终解决方案

感谢@triky提供的优秀方案,我也找到了类似问题的解决思路,最终使用以下代码实现:

# 指定阈值
th = pd.Timedelta(hours=3) 
# 计算分组
groups = (df.index.diff() > th).cumsum()
# 按分组拆分DataFrame
dfs = [g for _, g in df.groupby(groups)]
# 后续处理:对每个子DataFrame做小时粒度重采样和插值
dfs = [ df.resample('1h').first().interpolate(method='time') for df in dfs]

内容的提问来源于stack exchange,提问作者RecursionError

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:18:19