Заполните пропущенные даты-часы на фрейме данных пустыми значениями - PullRequest
0 голосов
/ 29 мая 2019

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

       MARKET_ID  SECTOR  DATE        HOUR      REVENUE  COUPONS  ITEMS
328    21         Fruits  2019-02-24  15:00:00  808.60   19       29
329    21         Fruits  2019-02-24  22:00:00  267.54   8        8
330    21         Fruits  2019-02-26  17:00:00  350.89   10       14
331    21         Dairy   2019-02-26  07:00:00  72.89    2        2
332    21         Dairy   2019-03-03  15:00:00  122.69   4        4

Некоторые примечания:

  • [HOUR] переходит от "00:00:00" к "23:00:00" (24 записи в дату).

  • Мой "составной ключ"будет комбинацией [MARKET_ID], [SECTOR], [DATE] и [HOUR], но я не использую MultiIndex в этом фрейме данных.

  • Часы без продаж (доход, купоны или предметы) не отображаются в виде строк в данных, которые я получаю.


Я бы хотел заполнить эти недостающие строки в моем фрейме данных, напримеркак показано ниже:

       MARKET_ID  SECTOR  DATE        HOUR      REVENUE  COUPONS  ITEMS
328    21         Fruits  2019-02-24  14:00:00  0        0        0

При поиске я нашел решения, использующие reindex или grouper, но я не уверен, что они подойдут для моей проблемы.Есть предложения?

Спасибо за внимание.

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Вы можете использовать resample здесь:

# df['DATE'] = pd.to_datetime(df['DATE'])
# df['HOUR'] = pd.to_timedelta(df['HOUR'])

grp = df.set_index(df['DATE']+df['HOUR']).groupby(['MARKET_ID', 'SECTOR'], 
                                                  sort=False).resample('H').sum().reset_index(level=1)

                               SECTOR  MARKET_ID  REVENUE  COUPONS  ITEMS
MARKET_ID                                                                
21        2019-02-24 15:00:00  Fruits         21   808.60       19     29
          2019-02-24 16:00:00  Fruits          0     0.00        0      0
          2019-02-24 17:00:00  Fruits          0     0.00        0      0
          2019-02-24 18:00:00  Fruits          0     0.00        0      0
          2019-02-24 19:00:00  Fruits          0     0.00        0      0
          2019-02-24 20:00:00  Fruits          0     0.00        0      0
          2019-02-24 21:00:00  Fruits          0     0.00        0      0
          2019-02-24 22:00:00  Fruits         21   267.54        8      8
          2019-02-24 23:00:00  Fruits          0     0.00        0      0
          2019-02-25 00:00:00  Fruits          0     0.00        0      0
          2019-02-25 01:00:00  Fruits          0     0.00        0      0
          2019-02-25 02:00:00  Fruits          0     0.00        0      0
          2019-02-25 03:00:00  Fruits          0     0.00        0      0
          2019-02-25 04:00:00  Fruits          0     0.00        0      0
          2019-02-25 05:00:00  Fruits          0     0.00        0      0
          2019-02-25 06:00:00  Fruits          0     0.00        0      0
          2019-02-25 07:00:00  Fruits          0     0.00        0      0
          2019-02-25 08:00:00  Fruits          0     0.00        0      0
          2019-02-25 09:00:00  Fruits          0     0.00        0      0
          2019-02-25 10:00:00  Fruits          0     0.00        0      0
          2019-02-25 11:00:00  Fruits          0     0.00        0      0
          2019-02-25 12:00:00  Fruits          0     0.00        0      0
          2019-02-25 13:00:00  Fruits          0     0.00        0      0
          2019-02-25 14:00:00  Fruits          0     0.00        0      0
          2019-02-25 15:00:00  Fruits          0     0.00        0      0
          2019-02-25 16:00:00  Fruits          0     0.00        0      0
          2019-02-25 17:00:00  Fruits          0     0.00        0      0
          2019-02-25 18:00:00  Fruits          0     0.00        0      0
          2019-02-25 19:00:00  Fruits          0     0.00        0      0
          2019-02-25 20:00:00  Fruits          0     0.00        0      0
          2019-02-25 21:00:00  Fruits          0     0.00        0      0
          2019-02-25 22:00:00  Fruits          0     0.00        0      0
          2019-02-25 23:00:00  Fruits          0     0.00        0      0
          2019-02-26 00:00:00  Fruits          0     0.00        0      0
          2019-02-26 01:00:00  Fruits          0     0.00        0      0
          2019-02-26 02:00:00  Fruits          0     0.00        0      0
          2019-02-26 03:00:00  Fruits          0     0.00        0      0
          2019-02-26 04:00:00  Fruits          0     0.00        0      0
          2019-02-26 05:00:00  Fruits          0     0.00        0      0
          2019-02-26 06:00:00  Fruits          0     0.00        0      0
          2019-02-26 07:00:00  Fruits          0     0.00        0      0
          2019-02-26 08:00:00  Fruits          0     0.00        0      0
          2019-02-26 09:00:00  Fruits          0     0.00        0      0
          2019-02-26 10:00:00  Fruits          0     0.00        0      0
          2019-02-26 11:00:00  Fruits          0     0.00        0      0
          2019-02-26 12:00:00  Fruits          0     0.00        0      0
          2019-02-26 13:00:00  Fruits          0     0.00        0      0
          2019-02-26 14:00:00  Fruits          0     0.00        0      0
          2019-02-26 15:00:00  Fruits          0     0.00        0      0
          2019-02-26 16:00:00  Fruits          0     0.00        0      0
...                               ...        ...      ...      ...    ...
          2019-03-01 14:00:00   Dairy          0     0.00        0      0
          2019-03-01 15:00:00   Dairy          0     0.00        0      0
          2019-03-01 16:00:00   Dairy          0     0.00        0      0
          2019-03-01 17:00:00   Dairy          0     0.00        0      0
          2019-03-01 18:00:00   Dairy          0     0.00        0      0
          2019-03-01 19:00:00   Dairy          0     0.00        0      0
          2019-03-01 20:00:00   Dairy          0     0.00        0      0
          2019-03-01 21:00:00   Dairy          0     0.00        0      0
          2019-03-01 22:00:00   Dairy          0     0.00        0      0
          2019-03-01 23:00:00   Dairy          0     0.00        0      0
          2019-03-02 00:00:00   Dairy          0     0.00        0      0
          2019-03-02 01:00:00   Dairy          0     0.00        0      0
          2019-03-02 02:00:00   Dairy          0     0.00        0      0
          2019-03-02 03:00:00   Dairy          0     0.00        0      0
          2019-03-02 04:00:00   Dairy          0     0.00        0      0
          2019-03-02 05:00:00   Dairy          0     0.00        0      0
          2019-03-02 06:00:00   Dairy          0     0.00        0      0
          2019-03-02 07:00:00   Dairy          0     0.00        0      0
          2019-03-02 08:00:00   Dairy          0     0.00        0      0
          2019-03-02 09:00:00   Dairy          0     0.00        0      0
          2019-03-02 10:00:00   Dairy          0     0.00        0      0
          2019-03-02 11:00:00   Dairy          0     0.00        0      0
          2019-03-02 12:00:00   Dairy          0     0.00        0      0
          2019-03-02 13:00:00   Dairy          0     0.00        0      0
          2019-03-02 14:00:00   Dairy          0     0.00        0      0
          2019-03-02 15:00:00   Dairy          0     0.00        0      0
          2019-03-02 16:00:00   Dairy          0     0.00        0      0
          2019-03-02 17:00:00   Dairy          0     0.00        0      0
          2019-03-02 18:00:00   Dairy          0     0.00        0      0
          2019-03-02 19:00:00   Dairy          0     0.00        0      0
          2019-03-02 20:00:00   Dairy          0     0.00        0      0
          2019-03-02 21:00:00   Dairy          0     0.00        0      0
          2019-03-02 22:00:00   Dairy          0     0.00        0      0
          2019-03-02 23:00:00   Dairy          0     0.00        0      0
          2019-03-03 00:00:00   Dairy          0     0.00        0      0
          2019-03-03 01:00:00   Dairy          0     0.00        0      0
          2019-03-03 02:00:00   Dairy          0     0.00        0      0
          2019-03-03 03:00:00   Dairy          0     0.00        0      0
          2019-03-03 04:00:00   Dairy          0     0.00        0      0
          2019-03-03 05:00:00   Dairy          0     0.00        0      0
          2019-03-03 06:00:00   Dairy          0     0.00        0      0
          2019-03-03 07:00:00   Dairy          0     0.00        0      0
          2019-03-03 08:00:00   Dairy          0     0.00        0      0
          2019-03-03 09:00:00   Dairy          0     0.00        0      0
          2019-03-03 10:00:00   Dairy          0     0.00        0      0
          2019-03-03 11:00:00   Dairy          0     0.00        0      0
          2019-03-03 12:00:00   Dairy          0     0.00        0      0
          2019-03-03 13:00:00   Dairy          0     0.00        0      0
          2019-03-03 14:00:00   Dairy          0     0.00        0      0
          2019-03-03 15:00:00   Dairy         21   122.69        4      4

[180 rows x 5 columns]
1 голос
/ 29 мая 2019

Создать объединенный столбец для даты и времени:

df['DATETIME'] = pd.to_datetime(df['DATE'] + ' ' + df['HOUR'])

Сброс избыточной информации:

df.drop(['DATE','HOUR'], inplace=True, axis = 1)

Теперь сгруппируйте по MARKET_ID и SECTOR и используйте resample с H нашей опцией и заполните пропущенные значения 0:

df.groupby(['MARKET_ID', 'SECTOR']).\
    apply(lambda x : x.set_index('DATETIME').resample('H').mean().fillna(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...