Добавьте периоды для запроса фрейма данных pandas, которые имеют нулевой спрос на уникальные комбинации значений столбцов

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

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

 Location   Part    UnitCost   DemandType   Demand    Period
NL         12345   6          GENERAL      4         2017-10-01 00:00:00
NL         12345   6          GENRAL       6         2017-12-01 00:00:00
 

В ноябре не было спроса, но об этом нет записей. Тогда он просто остается. Я хочу, чтобы это было добавлено. Что я могу сделать, чтобы превратить это в это:

 Location   Part    UnitCost   DemandType   Demand    Period
NL         12345   6          GENERAL      4         2017-10-01 00:00:00
NL         12345   6          GENERAL      0         2017-11-01 00:00:00
NL         12345   6          GENERAL      6         2017-12-01 00:00:00
 

Кроме того, я хочу добавить все месяцы с нулевым спросом с 2017-10-01 по 2020-03-01.
Важно, чтобы это было сделано для уникальной комбинации местоположения и детали. В моем фрейме данных более 100 уникальных комбинаций местоположения и части.

Заранее большое вам спасибо!

Ответ №1:

Вот один из способов:

 df['Period'] = pd.to_datetime(df['Period']) #Make sure Period is datatime dtype
df1 = df.set_index('Period') #Set Index for resample in next statement
df1.resample('MS').ffill().assign(Demand=df1['Demand']).fillna(0).reset_index()
 

Вывод:

       Period Location   Part  UnitCost DemandType  Demand
0 2017-10-01       NL  12345         6    GENERAL     4.0
1 2017-11-01       NL  12345         6    GENERAL     0.0
2 2017-12-01       NL  12345         6     GENRAL     6.0
 

Комментарии:

1. Это дает мне следующую ошибку: ValueError: невозможно переиндексировать неуникальный индекс с помощью метода или ограничения. Существуют также другие комбинации частей местоположения, такие как: US 54321 и CN 23451