Как заполнить пропущенные значения, используя последние доступные данные за прошедшие месяцы? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть такой фрейм данных:

Month/Year  Value   
01/2018     100 
03/2018     200 
06/2018     500 

Значения для 02/2018, 04/2018 и 05/2018 отсутствуют, поскольку значение не изменилось в эти месяцы. Я хотел бы иметь фрейм данных, который включает в себя пропущенные месяцы:

Month/Year  Value   
01/2018     100 
02/2018     100 
03/2018     200 
04/2018     200 
04/2018     200 
06/2018     500 

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вы можете использовать pd.DataFrame.resample, затем pd.Series.ffill, чтобы заполнить нулевые значения вперед. Если вам требуются строковые даты, требуется дополнительное преобразование, как показано ниже.

df['date'] = pd.to_datetime(df['Month/Year'])

res = df.resample('M', on='date')\
        .sum().ffill().astype(int)\
        .reset_index()

res['date'] = res['date'].dt.strftime('%m/%Y')

print(res)

      date  Value
0  01/2018    100
1  02/2018    100
2  03/2018    200
3  04/2018    200
4  05/2018    200
5  06/2018    500
0 голосов
/ 28 июня 2018

Один из способов сделать это:

df.assign(**{"Month/Year": pd.to_datetime(data["Month/Year"])}).set_index("Month/Year").resample("M").ffill().reset_index()

Должен дать:

  Month/Year  Value
0 2018-01-31    100
1 2018-02-28    100
2 2018-03-31    200
3 2018-04-30    200
4 2018-05-31    200
5 2018-06-30    500

df вот ваш стартовый фрейм данных. Он получает resampled с месячной частотой, и мы используем метод .ffill для заполнения значений за пропущенные месяцы.

Я выбрал однострочник, но вы можете разбить его на более структурированный блок кода. Вы также можете переформатировать столбец Month/Year после повторной выборки.

Надеюсь, это поможет.

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