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

对 Pandas 相当陌生,并开始掌握这个概念。希望你能给我指明正确的方向。


我是以下结构的测量温度值的数据集。该数据集大约有 1-2 百万个条目。由于某些传感器在某个时候出现故障,因此我存在相当多的缺失数据。


                          location  temperature

timestamp                                      

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

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

2019-08-23 22:21:06       outside1        25.00

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

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

[...]

我想做的是以这样一种方式重新采样数据集,即各个传感器的时间戳排成一行。具体来说,我希望能够计算各种传感器的均值/差异。我怎样才能做到这一点?


总的来说,我不确定表示此类数据以使其易于使用的最佳方法是什么。我知道创建组,这已经是一个很好的开始。但我仍然不知道如何以简单的方式在传感器之间创建这些计算。


任何帮助将不胜感激。谢谢!


繁花如伊
浏览 137回答 1
1回答

湖上湖

我认为最好的方法是首先旋转数据框,这样每个传感器都有一个时间序列列:df.pivot(columns="location", values="temperature")                                                                                        location             Garage  bedroom  outside1  outside2timestamp                                               2019-08-22 21:28:56   23.54      NaN       NaN       NaN2019-08-22 21:29:44     NaN    23.33       NaN       NaN2019-08-22 21:29:53   23.40      NaN       NaN       NaN2019-08-23 22:21:06     NaN      NaN      25.0       NaN2019-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  outside2timestamp                                                  2019-08-22 21:28:56  23.540000    23.33      25.0     24.122019-08-22 21:29:44  23.422105    23.33      25.0     24.122019-08-22 21:29:53  23.400000    23.33      25.0     24.122019-08-23 22:21:06  23.400000    23.33      25.0     24.122019-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  outside2timestamp                                                  2019-08-22 21:28:00  23.540000    23.33      25.0     24.122019-08-22 21:29:00  23.411053    23.33      25.0     24.122019-08-22 21:30:00        NaN      NaN       NaN       NaN2019-08-22 21:31:00        NaN      NaN       NaN       NaN2019-08-22 21:32:00        NaN      NaN       NaN       NaN...                        ...      ...       ...       ...2019-08-23 22:17:00        NaN      NaN       NaN       NaN2019-08-23 22:18:00        NaN      NaN       NaN       NaN2019-08-23 22:19:00        NaN      NaN       NaN       NaN2019-08-23 22:20:00        NaN      NaN       NaN       NaN2019-08-23 22:21:00  23.400000    23.33      25.0     24.12你显然有很多丢失的数据,采样间隔这么小,数据点稀疏,我猜你的实际数据集中有更多(理想情况下,你希望在每个重采样间隔中至少有一个数据点)。现在由您和您的实际数据决定如何进行。.nearest()您可以使用而不是填充缺失的数据.mean()。如果缺少的项目只是少数,您可以用滚动平均值填充它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python