Python-使用重新采样进行下采样而不使用平均值/均值

时间:2019-01-17 17:16:17

标签: python python-3.x pandas downsampling

大家好

我肯定缺少一些明显的东西,但是,
我有一个按小时计费的日期时间序列。我需要将其降采样为每日费率,使用resample('D')非常简单。
但是我无法使用均值对其进行下采样。例如,我需要选择一天中的一个小时(例如00:00h)并将其用作给定日期的值。 之前:

datetime              values
2018-05-08 00:00:00     0.1
2018-05-08 01:00:00     0.5
2018-05-08 02:00:00     0.7
2018-05-08 03:00:00     0.4
2018-05-08 04:00:00     0.7

所需的输出

datetime              values
2018-05-08             0.1

重采样中是否有任何方法,还是应该使用其他方法?

最佳

修改

首先,我有很多日期时间序列。

datetime              values
2018-05-08 00:00:00     0.1
2018-05-08 01:00:00     0.5
2018-05-08 02:00:00     0.7
2018-05-08 03:00:00     0.4
2018-05-08 04:00:00     0.7

然后我应用了保持小时率的移动平均值。

df['values'] = df['values'].rolling(168).mean(center=True)   

我使用168,因为我需要每小时3天之前和之后3天的小时费率。
从这里我需要下采样,但是如果我使用标准的重采样方法,它将再次取平均值。

df = df.resample('D').mean()

1 个答案:

答案 0 :(得分:1)

您可以应用所需的任何功能。其中有些已经为您实现(例如meansum,还有firstlast):

df.resample('D').first()
#             values
# datetime          
# 2018-05-08     0.1

但是您可以只应用所需的任何功能,它将像groupby一样传递给整个组进行操作。

例如,这需要凌晨2点之前的最后一次(假设数据帧已按索引排序):

import datetime

def last_before_2_am(group):
    before_2_am = group[group.index.time < datetime.time(2, 0, 0)]
    return before_2_am.iloc[-1]

df.resample('D').apply(last_before_2_am)
#             values
# datetime          
# 2018-05-08     0.5