python 多重时间序列的合并

lmyy7pcs  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(170)

今天我尝试合并多个时间序列,对应于临床记录(心率、动脉压......),以进行TSfresh分析。其中一些具有相同的时间步长,另一些具有不同的时间步长,如下所示:

df1 = 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
06/03/2021 17:25      30
06/03/2021 17:26      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                    
06/03/2021 17:25      8,6                    
06/03/2021 17:26      8,7                    
...                    ...

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
06/03/2021 21:00      3

我做的代码合并它生成一个新的 Dataframe 如下:

new = pd.concat([df1,df2,df3], ignore_index=True, axis=1)
                     Values1    Values2                Values3
Date                                                     
06/03/2021 17:22      30.0       8,7                     NaN
06/03/2021 17:23      30.0       8,6                     NaN
06/03/2021 17:24      30.0       8,7                     NaN
06/03/2021 17:25      30.0       8,6                     NaN
06/03/2021 17:26      30.0       8,7                     NaN
...
06/03/2021 18:00      32       9,5                       1

如我们所见,df3中只有一个变量被插入到新的 Dataframe new中,对应于3个 Dataframe 之间的公共时间,其他行被NaN替换。但我认为最好将NaN值替换为对应于小时的值。例如:对于values3,与06/03/2021 17:**对应的所有行将等于1,与06/03/2021 20:**对应的所有行将等于3...,例如:

Values1    Values2                Values3
Date                                                     
06/03/2021 17:22      30.0       8,7                     1
06/03/2021 17:23      30.0       8,6                     1
06/03/2021 17:24      30.0       8,7                     1
06/03/2021 17:25      30.0       8,6                     1
06/03/2021 17:26      30.0       8,7                     1
...
06/03/2021 18:00      32       9,5                       1
06/03/2021 18:01      32       9,5                       1
06/03/2021 18:02      32       9,5                       1
...
06/03/2021 20:00      32       9,5                       3
06/03/2021 20:01      32       9,5                       3
06/03/2021 20:02      32       9,5                       3
...

谢谢大家的帮助!

g52tjvyc

g52tjvyc1#

concat分组后,将 Dataframe 按日期时间索引(四舍五入为小时)分组,然后向前和向后填充值

# convert to datetime index (if not already converted)
# new.index = pd.to_datetime(new.index)

new = new.groupby(new.index.floor('H'), group_keys=False).apply(lambda s: s.ffill().bfill())

相关问题