Учитывая, например, 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
Пожалуйста, можно ли это как-то сделать с некоторыми функциями в pandas?
Конечная цель состоит в том, чтобы заполнить пустые значения путем линейной интерполяции между 0 и 1, чтобы получить прогресс в% текущей строки по отношению к 5-часовому периоду.
Другой трек / вопрос
Другой подход может состоять в том, чтобы инициализировать 2-й DataFrame с 5h
PeriodIndex, инициализировать значения нового столбца в 1
, а затем увеличить PeriodIndex
обратно до 1H
, чтобы объединить оба DataFrames.
A shift (-1) будет инициализировать последнюю строку периода.
Я бы повторил процесс без сдвига для значения 0.
Затем, как я могу создать этот новый DataFrame так, чтобы Я могу слить это с 1-го? Я попробовал несколько команд слияния, но у меня есть ошибка, указывающая, что оба индекса не имеют одинаковую частоту.
Спасибо за вашу помощь! Bests