为了账号安全,请及时绑定邮箱和手机立即绑定

对具有相同时间戳的时间序列进行分组

对具有相同时间戳的时间序列进行分组

繁花如伊 2023-02-07 13:55:29
对 Pandas 相当陌生,并开始掌握这个概念。希望你能给我指明正确的方向。我是以下结构的测量温度值的数据集。该数据集大约有 1-2 百万个条目。由于某些传感器在某个时候出现故障,因此我存在相当多的缺失数据。                          location  temperaturetimestamp                                      2019-08-22 21:28:56         Garage        23.542019-08-22 21:29:44        bedroom        23.332019-08-23 22:21:06       outside1        25.002019-08-23 22:21:33       outside2        24.122019-08-22 21:29:53         Garage        23.40[...]我想做的是以这样一种方式重新采样数据集,即各个传感器的时间戳排成一行。具体来说,我希望能够计算各种传感器的均值/差异。我怎样才能做到这一点?总的来说,我不确定表示此类数据以使其易于使用的最佳方法是什么。我知道创建组,这已经是一个很好的开始。但我仍然不知道如何以简单的方式在传感器之间创建这些计算。任何帮助将不胜感激。谢谢!
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

我认为最好的方法是首先旋转数据框,这样每个传感器都有一个时间序列列:


df.pivot(columns="location", values="temperature")                                                                                        


location             Garage  bedroom  outside1  outside2

timestamp                                               

2019-08-22 21:28:56   23.54      NaN       NaN       NaN

2019-08-22 21:29:44     NaN    23.33       NaN       NaN

2019-08-22 21:29:53   23.40      NaN       NaN       NaN

2019-08-23 22:21:06     NaN      NaN      25.0       NaN

2019-08-23 22:21:33     NaN      NaN       NaN     24.12

然后你可以用插值法填充缺失的数据


df.pivot(columns="location", values="temperature").interpolate(method="time", limit_direction="both")                                     


location                Garage  bedroom  outside1  outside2

timestamp                                                  

2019-08-22 21:28:56  23.540000    23.33      25.0     24.12

2019-08-22 21:29:44  23.422105    23.33      25.0     24.12

2019-08-22 21:29:53  23.400000    23.33      25.0     24.12

2019-08-23 22:21:06  23.400000    23.33      25.0     24.12

2019-08-23 22:21:33  23.400000    23.33      25.0     24.12

现在你应该让所有数据点在时间上对齐,你可以重新采样到一个恒定的采样率,比方说“1 分钟”


df.pivot(columns="location", values="temperature").interpolate(method="time", limit_direction="both").resample("1 min").mean()            


location                Garage  bedroom  outside1  outside2

timestamp                                                  

2019-08-22 21:28:00  23.540000    23.33      25.0     24.12

2019-08-22 21:29:00  23.411053    23.33      25.0     24.12

2019-08-22 21:30:00        NaN      NaN       NaN       NaN

2019-08-22 21:31:00        NaN      NaN       NaN       NaN

2019-08-22 21:32:00        NaN      NaN       NaN       NaN

...                        ...      ...       ...       ...

2019-08-23 22:17:00        NaN      NaN       NaN       NaN

2019-08-23 22:18:00        NaN      NaN       NaN       NaN

2019-08-23 22:19:00        NaN      NaN       NaN       NaN

2019-08-23 22:20:00        NaN      NaN       NaN       NaN

2019-08-23 22:21:00  23.400000    23.33      25.0     24.12

你显然有很多丢失的数据,采样间隔这么小,数据点稀疏,我猜你的实际数据集中有更多(理想情况下,你希望在每个重采样间隔中至少有一个数据点)。


现在由您和您的实际数据决定如何进行。.nearest()您可以使用而不是填充缺失的数据.mean()。如果缺少的项目只是少数,您可以用滚动平均值填充它们。


查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信