Учитывая, например, DataFrame с 1h Period
, я хотел бы установить значения 0 и 1 в новом столбце всякий раз, когда новый 5h Period
начинается и заканчивается соответственно.
Рассмотрим, например, эти входные данные:
import pandas as pd
from random import seed, randint
from collections import OrderedDict
p1h = pd.period_range(start='2020-02-01 00:00', end='2020-03-04 00:00', freq='1h', name='p1h')
seed(1)
values = [randint(0,10) for p in p1h]
df = pd.DataFrame({'Values' : values}, index=p1h)
Результат
df.head(10)
Values
p1h
2020-02-01 00:00 2
2020-02-01 01:00 9
2020-02-01 02:00 1
2020-02-01 03:00 4
2020-02-01 04:00 1
2020-02-01 05:00 7
2020-02-01 06:00 7
2020-02-01 07:00 7
2020-02-01 08:00 10
2020-02-01 09:00 6
Есть ли способ настроить новый столбец, чтобы получить следующий результат? (1-я и последняя строки для каждого периода инициализируются 0 и 1 соответственно)
df['period5h'] = df.resample('5h').???
df.head(10)
Values period5h
p1h
2020-02-01 00:00 2 0 <- 1st row of 5h period
2020-02-01 01:00 9
2020-02-01 02:00 1
2020-02-01 03:00 4
2020-02-01 04:00 1 1 <- last row of 5h period
2020-02-01 05:00 7 0 <- 1st row of 5h period
2020-02-01 06:00 7
2020-02-01 07:00 7
2020-02-01 08:00 10
2020-02-01 09:00 6 1 <- last row of 5h period
Пожалуйста, можно ли это каким-то образом сделать с некоторыми функциями в пандах?
Конечная цель состоит в том, чтобы заполнить пустые значения линейной интерполяцией между 0 и 1, чтобы получить прогресс в% текущей строки по отношению к 5-часовому периоду.
Другой трек / вопрос
Другой подход может заключаться в инициализации 2-го DataFrame с 5h
PeriodIndex, инициализации значений нового столбца до 1
, а затем повышении дискретизации PeriodIndex
до 1H
для объединения обоих DataFrame.
Сдвиг (-1) инициализирует последнюю строку периода.
Я бы повторил процесс без сдвига для значения 0.
Тогда как я могу создать этот новый DataFrame, чтобы объединить его с первым? Я пробовал несколько команд слияния, но у меня есть ошибка, указывающая на то, что оба индекса имеют разную частоту.
Спасибо за вашу помощь! Лучшее
df['period5h'] = np.arange(len(df))%5/4
, что также создаст интерполяцию - person Ben.T   schedule 03.04.2020