Как переиндексировать обновленный панд DataFrame с отсутствующими датами, сохраняя текущие значения - PullRequest
1 голос
/ 20 мая 2019

У меня есть датафрейм, индекс которого - это подмножество дней месяца. Я хочу добавить все дни от 1-го до последнего, заполняя несуществующие значения до 0 и сохраняя существующие.

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

Это мой образец DataFrame:

checkin_date                    checkout_date        duration              
0 2019-05-20 08:48:09.630928+00:00 2019-05-20 09:51:55.130997+00:00  01:03:45.500069
1 2019-05-20 08:39:12.660055+00:00 2019-05-20 09:51:55.130997+00:00 01:12:42.470942
2 2019-05-19 16:38:15.195097+00:00 2019-05-20 08:20:49.860755+00:00 15:42:34.665658
3 2019-05-19 16:20:29.513691+00:00 2019-05-20 07:41:46.928414+00:00 15:21:17.414723
4 2019-05-07 12:06:02.255836+00:00 2019-05-07 17:30:22.550536+00:00 05:24:20.294700
5 2019-05-07 11:00:19.765565+00:00 2019-05-07 11:10:33.792748+00:00 00:10:14.027183

Я делаю это для повторной выборки:

df.set_index('checkin_date').resample('D').sum()

, который дает мне DataFrame от первой существующей даты месяца до последней существующей даты:

                                    duration
checkin_date                                    
2019-05-07 00:00:00+00:00 0 days 05:34:34.321883
2019-05-08 00:00:00+00:00        0 days 00:00:00
2019-05-09 00:00:00+00:00        0 days 00:00:00
2019-05-10 00:00:00+00:00        0 days 00:00:00
2019-05-11 00:00:00+00:00        0 days 00:00:00
2019-05-12 00:00:00+00:00        0 days 00:00:00
2019-05-13 00:00:00+00:00        0 days 00:00:00
2019-05-14 00:00:00+00:00        0 days 00:00:00
2019-05-15 00:00:00+00:00        0 days 00:00:00
2019-05-16 00:00:00+00:00        0 days 00:00:00
2019-05-17 00:00:00+00:00        0 days 00:00:00
2019-05-18 00:00:00+00:00        0 days 00:00:00
2019-05-19 00:00:00+00:00 1 days 07:03:52.080381
2019-05-20 00:00:00+00:00 0 days 02:16:27.971011

Что идеально. Но мне нужно заполнить DataFrame недостающими датами месяца: первые и последние дни.

Так что я пытаюсь что-то подобное переиндексировать:

idx = pd.date_range(datetime(year=2019, month=5, day=1), datetime(year=2019, month=5, day=31))
df.reindex(idx, fill_value=0)

Сначала эта последняя команда приводит к нулям во всех ячейках. Я пытался переформатировать df index или idx, но ничего не работает.

Есть идеи?

1 Ответ

2 голосов
/ 20 мая 2019

Использование DatetimeIndex.tz_localize:

df1 = (df.set_index('ckin_date')
         .resample('D')
         .sum()
         .reindex(idx.tz_localize('UTC'), fill_value=0))

print (df1)

                                        duration
2019-05-01 00:00:00+00:00        0 days 00:00:00
2019-05-02 00:00:00+00:00        0 days 00:00:00
2019-05-03 00:00:00+00:00        0 days 00:00:00
2019-05-04 00:00:00+00:00        0 days 00:00:00
2019-05-05 00:00:00+00:00        0 days 00:00:00
2019-05-06 00:00:00+00:00        0 days 00:00:00
2019-05-07 00:00:00+00:00 0 days 05:34:34.321883
2019-05-08 00:00:00+00:00        0 days 00:00:00
2019-05-09 00:00:00+00:00        0 days 00:00:00
2019-05-10 00:00:00+00:00        0 days 00:00:00
2019-05-11 00:00:00+00:00        0 days 00:00:00
2019-05-12 00:00:00+00:00        0 days 00:00:00
2019-05-13 00:00:00+00:00        0 days 00:00:00
2019-05-14 00:00:00+00:00        0 days 00:00:00
2019-05-15 00:00:00+00:00        0 days 00:00:00
2019-05-16 00:00:00+00:00        0 days 00:00:00
2019-05-17 00:00:00+00:00        0 days 00:00:00
2019-05-18 00:00:00+00:00        0 days 00:00:00
2019-05-19 00:00:00+00:00 1 days 07:03:52.080381
2019-05-20 00:00:00+00:00 0 days 02:16:27.971011
2019-05-21 00:00:00+00:00        0 days 00:00:00
2019-05-22 00:00:00+00:00        0 days 00:00:00
2019-05-23 00:00:00+00:00        0 days 00:00:00
2019-05-24 00:00:00+00:00        0 days 00:00:00
2019-05-25 00:00:00+00:00        0 days 00:00:00
2019-05-26 00:00:00+00:00        0 days 00:00:00
2019-05-27 00:00:00+00:00        0 days 00:00:00
2019-05-28 00:00:00+00:00        0 days 00:00:00
2019-05-29 00:00:00+00:00        0 days 00:00:00
2019-05-30 00:00:00+00:00        0 days 00:00:00
2019-05-31 00:00:00+00:00        0 days 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...