Python - Downsample, используя resample, не используя среднее / среднее - PullRequest
0 голосов
/ 17 января 2019

Hy, ребята

Я, должно быть, упускаю что-то очень очевидное, но,
у меня есть дата-время с почасовой ставкой. Мне нужно понизить его до дневного уровня, что довольно просто с помощью повторной выборки ('D').
Но я не могу уменьшить его, используя среднее. Мне нужно, например, выбрать один час дня (например, 00:00) и использовать его в качестве значения для данного дня. До:

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 голосов
/ 17 января 2019

Вы можете применять любую функцию, какую захотите.Некоторые из них уже реализованы для вас (например, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...