gpt4 book ai didi

python - 如何对缺失日期的重新采样的 pandas DataFrame 重新建立索引并保持当前值

转载 作者:行者123 更新时间:2023-12-01 00:56:20 24 4
gpt4 key购买 nike

我有一个数据框,其索引是一个月的子集天数。我想添加所有天数,从第一天到最后一天,将不存在的值填充为 0 并保留现有的值。

我尝试过重新索引,但所有尝试都以丢失数据结束。

这是我的示例数据框:

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()

这给了我从当月第一个现有日期到最后一个现有日期的数据帧:

                                    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 但没有任何效果。

有什么想法吗?

最佳答案

使用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

关于python - 如何对缺失日期的重新采样的 pandas DataFrame 重新建立索引并保持当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com