Pandas 熊猫只在有意义的时候才重新取样

Pandas 熊猫只在有意义的时候才重新取样,pandas,pandas-resample,Pandas,Pandas Resample,我有一个非常不规则的时间序列。两个记录之间的时间差可以是1秒或10天 我希望每1小时对数据进行一次重采样,但仅当顺序记录少于1小时时 如何在不进行太多循环的情况下实现这一点 在上面的示例中,我只想对第5-6行(差值为10s)和第6-7行(差值为50min)进行重采样。 其他人应该保持现状 tmp=vals[['datumtijd','filter data']] datumtijd filter data 0 1970-11-01 00:00:00

我有一个非常不规则的时间序列。两个记录之间的时间差可以是1秒或10天

我希望每1小时对数据进行一次重采样,但仅当顺序记录少于1小时时

如何在不进行太多循环的情况下实现这一点

在上面的示例中,我只想对第5-6行(差值为10s)和第6-7行(差值为50min)进行重采样。 其他人应该保持现状

tmp=vals[['datumtijd','filter data']]

     datumtijd           filter data
0   1970-11-01 00:00:00        129.0
1   1970-12-01 00:00:00        143.0
2   1971-01-05 00:00:00        151.0
3   1971-02-01 00:00:00        151.0
4   1971-03-01 00:00:00        163.0
5   1971-03-01 00:00:10        163.0
6   1971-03-01 00:00:20        163.0
7   1971-03-01 00:01:10        163.0
8   1971-03-01 00:04:10        163.0
..         ...          ...
244 1981-08-19 00:00:00        102.0
245 1981-09-02 00:00:00         98.0
246 1981-09-17 00:00:00         92.0
247 1981-10-01 00:00:00         89.0
248 1981-10-19 00:00:00         92.0

您可以通过在时间戳的小时楼层上使用
groupby
来明确这一点:

grouped = df.groupby(df['datumtijd'].dt.floor('1H')).mean()
这是显式地查找每个现有数据点的小时数,并对匹配的数据点进行分组

但您也可以只进行重采样,然后过滤掉空数据,因为
pandas
仍然可以非常快速地完成这项工作:

resampled = df.resample('1H', on='datumtijd').mean().dropna()
在任何一种情况下,您都会得到以下结果(请注意,我更改了最后一个时间戳,只是为了让控制台显示小时数):

还有一个简短的澄清。在您的示例中,第5-8行都发生在同一个小时内,因此它们都被分组在一起(小时:分钟:秒)

还有,看看这个

                     filter data
datumtijd                       
1970-11-01 00:00:00        129.0
1970-12-01 00:00:00        143.0
1971-01-05 00:00:00        151.0
1971-02-01 00:00:00        151.0
1971-03-01 00:00:00        163.0
1981-08-19 00:00:00        102.0
1981-09-02 00:00:00         98.0
1981-09-17 00:00:00         92.0
1981-10-01 00:00:00         89.0
1981-10-19 03:00:00         92.0