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

多时间序列合并与NaN值按小时填充问题(TSfresh分析场景)

问题描述

我尝试合并心率、动脉压等临床记录的多个时间序列用于TSfresh分析,这些序列时间步长不同:

  • df1、df2为分钟级数据:
df1 = pd.read_csv("PATH", delimiter='\t', header=None, index_col=0)
                     Values
Date                       
06/03/2021 17:22      30
06/03/2021 17:23      30
06/03/2021 17:24      30
...                   ..

df2 = pd.read_csv("PATH", delimiter='\t', header=None, index_col=0)
                     Values
Date                                            
06/03/2021 17:22      8,7                    
06/03/2021 17:23      8,6                    
06/03/2021 17:24      8,7                    
...                    ...
  • df3为小时级数据:
df3 = pd.read_csv("PATH", delimiter='\t', header=None, index_col=0)
                    Values
Date                      
06/03/2021 17:00      1
06/03/2021 18:00      1
06/03/2021 19:00      1
06/03/2021 20:00      3
...

用pd.concat([df1,df2,df3], ignore_index=True, axis=1)合并后,仅三个序列共有的整点时刻有Values3值,其余为NaN,需求是将每个小时内的所有时刻都填充对应小时的df3值,比如17:**的所有行Values3为1,20:**的所有行Values3为3。

解决方案

步骤1:统一时间索引为datetime类型

先将所有DataFrame的字符串索引转换为datetime类型,方便后续时间操作:

import pandas as pd

# 处理df1
df1.index = pd.to_datetime(df1.index)
df1.columns = ['Values1']

# 处理df2:把逗号格式的小数点转为点,再转数值类型
df2.index = pd.to_datetime(df2.index)
df2['Values'] = df2['Values'].str.replace(',', '.').astype(float)
df2.columns = ['Values2']

# 处理df3
df3.index = pd.to_datetime(df3.index)
df3.columns = ['Values3']

步骤2:扩展df3到分钟级并填充

将小时级的df3扩展为分钟级,用前向填充把整点的值覆盖到该小时内的所有分钟:

# 按分钟重采样,用前向填充补充缺失值
df3_resampled = df3.resample('T').ffill()

步骤3:合并三个序列

用join方法合并,确保所有分钟级时刻都能匹配到对应的Values3:

# 依次合并三个DataFrame
new_df = df1.join(df2).join(df3_resampled)

备选方案:直接处理已合并的new DataFrame

如果已经有了合并后的new DataFrame,可直接对Values3列做填充:

# 先转换索引为datetime类型
new.index = pd.to_datetime(new.index)

# 构建小时到Values3值的映射字典
hour_map = df3.groupby(df3.index.floor('H'))['Values3'].first().to_dict()

# 用日期+小时匹配映射值,填充NaN
new['Values3'] = new.index.floor('H').map(hour_map)

最终效果

处理后DataFrame会呈现如下格式:

Values1    Values2  Values3
Date                                            
2021-03-06 17:22      30.0        8.7        1
2021-03-06 17:23      30.0        8.6        1
2021-03-06 17:24      30.0        8.7        1
...
2021-03-06 18:00      32.0        9.5        1
2021-03-06 18:01      32.0        9.5        1
...
2021-03-06 20:00      32.0        9.5        3
2021-03-06 20:01      32.0        9.5        3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:15:22