Временной ряд данных панели (добавление меток времени с интерполированными значениями) - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть набор данных панели с отсутствующими метками времени, включая значения для некоторых идентификаторов в кадре данных.

Index      Identiy Value
2015-01-01   A      13
2017-01-01   A      14
2018-01-01   A      24 
2019-01-01   A      30
2015-01-01   B      10
2016-01-01   B      12
2017-01-01   B      18
2018-01-01   B      25 
2019-01-01   B      30

Как можно автоматически проверить, отсутствуют ли определенные метки времени (пробелы), а затем создать строку с интерполированным значением. Проще, как я могу добавить строку в dataframe с следующей информацией.

Index         Identity        Value
2016-0101         A         13,5 (Interpolated between the gap (13,5)

Это должно быть сделано только для пропусков с менее чем 6 пропущенными точками.

Я понимаю функцию интерполяции, но, к сожалению, не могу связать ее с созданием строки. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 19 февраля 2020

Используйте GroupBy с resample к годовому значению, поэтому мы добавляем недостающие годы к нашим данным на Identity, затем interpolate и, наконец, устанавливаем индекс на начало года с pd.offsets.YearBegin:

dfn = df.groupby('Identiy').apply(lambda x: x.resample('Y').first().interpolate(limit=5).ffill())

dfn.index = dfn.index.droplevel(0) - pd.offsets.YearBegin()

           Identiy  Value
2015-01-01       A   13.0
2016-01-01       A   13.5
2017-01-01       A   14.0
2018-01-01       A   24.0
2019-01-01       A   30.0
2015-01-01       B   10.0
2016-01-01       B   12.0
2017-01-01       B   18.0
2018-01-01       B   25.0
2019-01-01       B   30.0
...