Pandas: Как заполнить отсутствующие значения периода / даты и времени в многоиндексном временном ряду? - PullRequest
1 голос
/ 05 августа 2020

У меня есть мультииндексный фрейм данных, в котором одним из индексов является Period или DateTime. В нем отсутствуют некоторые значения, подобные приведенному ниже:

dt = pd.DataFrame(zip(['x']*4+['y']*4, 
                      range(8), 
                      list(pd.period_range('2020-08-02T00:00:00', '2020-08-02T03:00:00', freq='H'))*2)
                  ,columns=['a', 'b', 'd']).set_index(['a', 'd'])
dt = dt.drop([('x',pd.Period('2020-08-02 01:00', 'H')), 
              ('y',pd.Period('2020-08-02 01:00', 'H'))])
dt

mult-iindex dataframe with missing values

I'd like to fill the missing period values with NaN. The end result would be:

желаемый результат

Если бы у меня был временной ряд с простым индексом, это было бы просто: dt.resample('H').first(). Как мне это сделать в этом мультииндексном таймсерии?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Согласно вашему комментарию под Генри Йиком, я предполагаю, что все временные ряды находятся в одном диапазоне, поэтому я думаю, вы можете использовать reindex и создать MultiIndex.from_product, например:

dt_ = dt.reindex(pd.MultiIndex.from_product(
                    [dt.index.get_level_values('a').unique(), 
                     pd.date_range(dt.index.get_level_values('d').min(), 
                                   dt.index.get_level_values('d').max(), 
                                   freq='H')], 
                     names=dt.index.names))
print(dt_)
                         b
a d                       
x 2020-08-02 00:00:00  0.0
  2020-08-02 01:00:00  NaN
  2020-08-02 02:00:00  2.0
  2020-08-02 03:00:00  3.0
y 2020-08-02 00:00:00  4.0
  2020-08-02 01:00:00  NaN
  2020-08-02 02:00:00  6.0
  2020-08-02 03:00:00  7.0
1 голос
/ 05 августа 2020

Я думаю, вы могли бы просто сбросить индекс для groupby:

dt = dt.reset_index("a").groupby("a").resample('H').first()

dt["a"] = dt["a"].ffill()

print (dt)

                    a    b
a d                       
x 2020-08-02 00:00  x  0.0
  2020-08-02 01:00  x  NaN
  2020-08-02 02:00  x  2.0
  2020-08-02 03:00  x  3.0
y 2020-08-02 00:00  y  4.0
  2020-08-02 01:00  y  NaN
  2020-08-02 02:00  y  6.0
  2020-08-02 03:00  y  7.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...