gpt4 book ai didi

python - 在 Pandas 系列中制作缺失的时隙并填充 0 值

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:58 25 4
gpt4 key购买 nike

我有一个 pandas 系列(我通过将两列分组divvy_df.groupby(['from_station_name', 'starttime']).size() ):

from_station_name       starttime          
900 W Harrison 2014-07-01 08:00:00 1
2014-07-01 10:00:00 1
2014-07-01 11:00:00 1
2014-07-01 12:00:00 1
2014-07-01 13:00:00 1
2014-07-01 16:00:00 1
2014-07-01 17:00:00 3
2014-07-01 22:00:00 1
2014-07-02 01:00:00 1
2014-07-02 08:00:00 1
2014-07-02 12:00:00 2
...

如您所见,结果系列显示了为该站名称记录开始时间的次数。不过,我想以某种方式实现它,以便创建缺失 的时隙并用值 0 填充。这可能吗?

所以我想要这样的东西:

from_station_name       starttime          
900 W Harrison 2014-07-01 00:00:00 0
2014-07-01 01:00:00 0
2014-07-01 02:00:00 0
2014-07-01 03:00:00 0
...
2014-07-01 08:00:00 1
2014-07-01 09:00:00 0
2014-07-01 10:00:00 1
2014-07-01 11:00:00 1
2014-07-01 12:00:00 1
2014-07-01 13:00:00 0
...
2014-07-01 22:00:00 1
2014-07-01 23:00:00 0
2014-07-02 00:00:00 0

完成这样的事情的最佳方法是什么?

最佳答案

通常当你有一个系列,ts,带有 DatetimeIndex 时,你可以将它展开为使用 ts.reindexts.asfreqts.resample 包含新日期。由于 ts.reindex 有一个 fill_value 参数用于填充缺失值,我认为在这种情况下使用 ts.reindex 是最简单的。

但是,在这个问题中,ts 有一个带有 from_station_name 的 MultiIndex 和开始时间 级别。

所以第一步是将 from_station_name 级别移出索引。有两种选择。您可以使用 reset_index 将其移动到列中,或使用unstack 将其移动到新的列索引级别。我认为 unstacking

ts = ts.unstack(level=0)

在这里是更好的选择,因为使用其他选项(使用 reset_index)您遇到与索引中的重复日期相关的问题,以及回填和前向填充缺少的 from_station_name 值。

现在 Series 有一个单层 DatetimeIndex,所以你可以像这样reindex:

index = pd.date_range('2014-07-01', '2014-07-03', freq='H')
ts = ts.reindex(index, fill_value=0)

现在撤消unstack 操作,从而将列索引级别移回进入行索引:

ts = ts.stack()
ts = ts.swaplevel(0,1)

import pandas as pd
ts = pd.Series({('900 W Harrison', '2014-07-01 08:00:00'): 1,
('900 W Harrison', '2014-07-01 10:00:00'): 1,
('900 W Harrison', '2014-07-01 11:00:00'): 1,
('900 W Harrison', '2014-07-01 12:00:00'): 1,
('900 W Harrison', '2014-07-01 13:00:00'): 1,
('900 W Harrison', '2014-07-01 16:00:00'): 1,
('900 W Harrison', '2014-07-01 17:00:00'): 3,
('900 W Harrison', '2014-07-01 22:00:00'): 1,
('900 W Harrison', '2014-07-02 01:00:00'): 1,
('900 W Harrison', '2014-07-02 08:00:00'): 1,
('900 W Harrison', '2014-07-02 12:00:00'): 2})

ts = ts.unstack(level=0)
# ensure ts.index is a DatetimeIndex
ts.index = pd.to_datetime(ts.index)
index = pd.date_range('2014-07-01', '2014-07-03', freq='H')
ts = ts.reindex(index, fill_value=0)
ts = ts.stack()
ts = ts.swaplevel(0,1)
ts = ts.sortlevel()
print(ts)

产量

900 W Harrison  2014-07-01 00:00:00    0
2014-07-01 01:00:00 0
2014-07-01 02:00:00 0
2014-07-01 03:00:00 0
2014-07-01 04:00:00 0
2014-07-01 05:00:00 0
2014-07-01 06:00:00 0
2014-07-01 07:00:00 0
2014-07-01 08:00:00 1
2014-07-01 09:00:00 0
2014-07-01 10:00:00 1
...
2014-07-02 21:00:00 0
2014-07-02 22:00:00 0
2014-07-02 23:00:00 0
2014-07-03 00:00:00 0
dtype: int64

关于python - 在 Pandas 系列中制作缺失的时隙并填充 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576851/

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