每小时对有间隙的时间序列数据重新采样
Resample time series data hourly with gaps
我有一个长达一年的数据集,其中包含每 15 分钟采样一次的日期和温度,Python 中的数据偶尔会出现间隙。我已将日期和温度保存到 pandas 中的数据框中:
2015-08-21 09:35:47 27.928
2015-08-21 09:55:47 28.839
2015-08-21 10:15:47 28.495
...
2016-08-10 05:39:24 11.246
2016-08-10 05:59:24 11.912
2016-08-10 06:19:24 13.066
我想将数据重新采样到每小时并尝试使用此行:
newDat=data.resample(rule='H')
我也尝试使用第一个和最后一个 'how',但仍然没有得到我要找的东西。我的结果如下:
2015-08-21 09:00:00 28.383500
2015-08-21 10:00:00 27.959667
2015-08-21 11:00:00 29.513333
...
2016-08-10 06:00:00 14.235667
2016-08-10 07:00:00 20.867333
2016-08-10 08:00:00 26.725000
我不想更改实际温度或时间值。我希望命令在一天中的每个小时内抓取第一次,所以我得到如下内容:
2015-08-21 09:15:47 27.925
2015-08-21 10:15:47 28.495
2015-08-21 11:15:47 27.596
...
2016-08-10 07:19:24 16.944
2016-08-10 08:19:24 27.149
2016-08-10 09:19:24 28.152
DataFrame.groupby
方法可以接受一系列值作为组键。
期望序列的长度与DataFrame中的行数相同,将序列中等值项对应的行分组。
因此您可以使用截断到最接近小时的日期作为组键:
In [133]: groupkey = data['date'].values.astype('datetime64[h]'); groupkey
Out[133]:
array(['2015-08-21T09', '2015-08-21T09', '2015-08-21T10', '2016-08-10T05',
'2016-08-10T05', '2016-08-10T06'], dtype='datetime64[h]')
import pandas as pd
Timestamp = pd.Timestamp
data = pd.DataFrame({'date': [Timestamp('2015-08-21 09:35:47'), Timestamp('2015-08-21 09:55:47'), Timestamp('2015-08-21 10:15:47'), Timestamp('2016-08-10 05:39:24'), Timestamp('2016-08-10 05:59:24'), Timestamp('2016-08-10 06:19:24')], 'temp': [27.928000000000001, 28.839000000000002, 28.495000000000001, 11.245999999999999, 11.912000000000001, 13.065999999999999]})
groupkey = data['date'].values.astype('datetime64[h]')
result = data.groupby(groupkey).first().set_index('date')
print(result)
产量
temp
date
2015-08-21 09:35:47 27.928
2015-08-21 10:15:47 28.495
2016-08-10 05:39:24 11.246
2016-08-10 06:19:24 13.066
我有一个长达一年的数据集,其中包含每 15 分钟采样一次的日期和温度,Python 中的数据偶尔会出现间隙。我已将日期和温度保存到 pandas 中的数据框中:
2015-08-21 09:35:47 27.928
2015-08-21 09:55:47 28.839
2015-08-21 10:15:47 28.495
...
2016-08-10 05:39:24 11.246
2016-08-10 05:59:24 11.912
2016-08-10 06:19:24 13.066
我想将数据重新采样到每小时并尝试使用此行:
newDat=data.resample(rule='H')
我也尝试使用第一个和最后一个 'how',但仍然没有得到我要找的东西。我的结果如下:
2015-08-21 09:00:00 28.383500
2015-08-21 10:00:00 27.959667
2015-08-21 11:00:00 29.513333
...
2016-08-10 06:00:00 14.235667
2016-08-10 07:00:00 20.867333
2016-08-10 08:00:00 26.725000
我不想更改实际温度或时间值。我希望命令在一天中的每个小时内抓取第一次,所以我得到如下内容:
2015-08-21 09:15:47 27.925
2015-08-21 10:15:47 28.495
2015-08-21 11:15:47 27.596
...
2016-08-10 07:19:24 16.944
2016-08-10 08:19:24 27.149
2016-08-10 09:19:24 28.152
DataFrame.groupby
方法可以接受一系列值作为组键。
期望序列的长度与DataFrame中的行数相同,将序列中等值项对应的行分组。
因此您可以使用截断到最接近小时的日期作为组键:
In [133]: groupkey = data['date'].values.astype('datetime64[h]'); groupkey
Out[133]:
array(['2015-08-21T09', '2015-08-21T09', '2015-08-21T10', '2016-08-10T05',
'2016-08-10T05', '2016-08-10T06'], dtype='datetime64[h]')
import pandas as pd
Timestamp = pd.Timestamp
data = pd.DataFrame({'date': [Timestamp('2015-08-21 09:35:47'), Timestamp('2015-08-21 09:55:47'), Timestamp('2015-08-21 10:15:47'), Timestamp('2016-08-10 05:39:24'), Timestamp('2016-08-10 05:59:24'), Timestamp('2016-08-10 06:19:24')], 'temp': [27.928000000000001, 28.839000000000002, 28.495000000000001, 11.245999999999999, 11.912000000000001, 13.065999999999999]})
groupkey = data['date'].values.astype('datetime64[h]')
result = data.groupby(groupkey).first().set_index('date')
print(result)
产量
temp
date
2015-08-21 09:35:47 27.928
2015-08-21 10:15:47 28.495
2016-08-10 05:39:24 11.246
2016-08-10 06:19:24 13.066