Передняя заливка панд DataFrame условна по времени - PullRequest
1 голос
/ 02 октября 2019

У меня есть следующий дневной фрейм данных:

daily_index = pd.date_range(start='1/1/2015', end='1/01/2018', freq='D')
random_values = np.random.randint(1, 3,size=(len(daily_index), 1))
daily_df = pd.DataFrame(random_values, index=daily_index, columns=['A']).replace(1, np.nan)

Я хочу отобразить каждое значение в фрейм данных, где каждый день расширяется до нескольких интервалов в 1 минуту. Окончательный DF выглядит так:

intraday_index = pd.date_range(start='1/1/2015', end='1/01/2018', freq='1min')
intraday_df_full = daily_df.reindex(intraday_index)
# Choose random indices.
drop_indices = np.random.choice(intraday_df_full.index, 5000, replace=False)
intraday_df = intraday_df_full.drop(drop_indices)

В последнем кадре данных каждый день разбивается на интервалы в 1 минуту, но некоторые отсутствуют (поэтому число минут в каждом дне не одинаково). Некоторые дни имеют значение в начале дня, но nan для остальных.

У меня вопрос, только для дней, которые начинаются с некоторого значения в первую минуту, как мне заполнить фронт дляостаток дня?

Сначала я попытался просто сделать следующее daily_df.reindex(intraday_index, method='ffill', limit=1440), но, поскольку некоторые строки отсутствуют, это не может работать. Может быть, есть способ ограничить по времени?

1 Ответ

1 голос
/ 02 октября 2019

Следуя комментариям @ Datanovice, эта строка достигает желаемого результата:

intraday_df.groupby(intraday_df.index.date).transform('ffill')

, где my groupby определяет желаемые группы, к которым мы хотим применить операцию, и transform делает это без изменения индекса DataFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...