将具有相同时间戳的时间序列分组

时间:2020-06-28 09:47:43

标签: python pandas time-series pandas-groupby

对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
[...]

我想做的是对数据集重新采样,以使各个传感器的时间戳对齐。 具体地说,我希望能够计算各种传感器的均值/差值。我该怎么做?

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

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

1 个答案:

答案 0 :(得分:1)

我认为最好的方法是首先旋转数据帧,以便为每个传感器设置一个时间序列列:

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()来填充丢失的数据。如果缺少的项目很少,则可以用滚动平均值填充它们。