Python - 使用重新采样而不是使用 average/mean 进行下采样
Python - Downsample using resample not using average/mean
伙计们
我一定遗漏了一些非常明显的东西但是,
我有一个按小时收费的日期时间系列。我需要将其下采样到每日速率,使用 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
resample有什么方法还是我应该使用其他方法?
最佳
编辑
首先我有大日期时间系列。
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()
您可以应用任何您想要的功能。其中一些已经为您实现(例如 mean
、sum
,还有 first
和 last
):
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
伙计们
我一定遗漏了一些非常明显的东西但是,
我有一个按小时收费的日期时间系列。我需要将其下采样到每日速率,使用 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
resample有什么方法还是我应该使用其他方法?
最佳
编辑
首先我有大日期时间系列。
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()
您可以应用任何您想要的功能。其中一些已经为您实现(例如 mean
、sum
,还有 first
和 last
):
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