我有一个数据框,其索引是一个月的子集。我要添加从第一天到最后一天的所有日期,将不存在的值填充为0并保留现有的值。
我尝试过重新索引,但是所有尝试都以缺少数据为结束。
这是我的示例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索引或idx,但是没有任何效果。
有什么主意吗?
答案 0 :(得分:2)
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