Перенос значений между 2-мя кадрами на основе детализации по времени - PullRequest
1 голос
/ 23 апреля 2019

У меня есть один кадр данных, df_60 с 60-минутной гранулярностью.И еще одна с 30-минутной детализацией, df_30.Я хочу переместить значения из столбца в df_60 в столбец в df_30 и сохранить продолжительность появления значения.

Скажем, у меня была дата 2011-01-05 00:00:00 0, ежечасная гранулярность, и она имела значение в столбце val, равное 1. Как «заполнить» значения 30-минутного таймфреймаво всех случаях, когда столбец в 60-минутном кадре данных был равен x?

>>>df_60
dt_hr_idx           val #here val = 1 for times between 2am and 4am
2011-01-05 00:00:00 0
2011-01-05 01:00:00 0
2011-01-05 02:00:00 1
2011-01-05 03:00:00 1
2011-01-05 04:00:00 0

>>>df_30
dt_hlaf_hr_idx      val #df_30 val column is currently blank
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 0
2011-01-05 02:30:00 0
2011-01-05 03:00:00 0
2011-01-05 03:30:00 0
2011-01-05 04:00:00 0

#desired df
df_30
dt_hlaf_hr_idx      val  #val should be 1 for values between 2am and 4am
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 1
2011-01-05 02:30:00 1
2011-01-05 03:00:00 1
2011-01-05 03:30:00 1
2011-01-05 04:00:00 0

Я мог бы что-то взломать с помощью циклов, но есть ли в наличии здравый метод?

Спасибо.

1 Ответ

2 голосов
/ 23 апреля 2019

Использование Series.reindex с ffill:

df = df_60.reindex(df_30.index, method='ffill')
print (df)
                     val
2011-01-05 00:00:00    0
2011-01-05 00:30:00    0
2011-01-05 01:00:00    0
2011-01-05 01:30:00    0
2011-01-05 02:00:00    1
2011-01-05 02:30:00    1
2011-01-05 03:00:00    1
2011-01-05 03:30:00    1
2011-01-05 04:00:00    0

Другое решение с merge_asof:

df = pd.merge_asof(df_30, df_60, left_index=True, right_index=True)
print (df)
                     val_x  val_y
2011-01-05 00:00:00      0      0
2011-01-05 00:30:00      0      0
2011-01-05 01:00:00      0      0
2011-01-05 01:30:00      0      0
2011-01-05 02:00:00      0      1
2011-01-05 02:30:00      0      1
2011-01-05 03:00:00      0      1
2011-01-05 03:30:00      0      1
2011-01-05 04:00:00      0      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...