Python – понижающая выборка с использованием повторной выборки без использования среднего/среднего значения

Привет ребята

я должен упустить что-то очень очевидное, но,
у меня есть ряд даты и времени с почасовой оплатой. Мне нужно понизить его до дневной нормы, что довольно просто с помощью resample('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.

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()

person joelmoliv    schedule 17.01.2019    source источник
comment
@pault дело в том, что я не могу усреднить это. я предоставлю больше информации в следующем комментарии.   -  person joelmoliv    schedule 17.01.2019
comment
@joel отредактируйте свой вопрос, чтобы предоставить дополнительную информацию. Не добавляйте это в комментарии. Также предоставьте желаемый результат.   -  person pault    schedule 17.01.2019


Ответы (1)


Вы можете применить любую функцию, которую хотите. Некоторые из них уже реализованы для вас (например, 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
person Graipher    schedule 17.01.2019