gpt4 book ai didi

python - Pandas 时间序列重新采样,分箱似乎关闭

转载 作者:行者123 更新时间:2023-11-28 17:02:10 25 4
gpt4 key购买 nike

当我注意到这个奇怪的装箱时,我在这里回答了另一个关于我想知道的关于 Pandas 的问题,时间序列重采样。

假设我有一个包含每日日期范围索引的数据框和一个我想重新采样并求和的列。

index = pd.date_range(start="1/1/2018", end="31/12/2018") 
df = pd.DataFrame(np.random.randint(100, size=len(index)),
columns=["sales"], index=index)

>>> df.head()
sales
2018-01-01 66
2018-01-02 18
2018-01-03 45
2018-01-04 92
2018-01-05 76

现在我在一个月前重新取样,一切看起来都很好:

>>>df.resample("1M").sum()

sales
2018-01-31 1507
2018-02-28 1186
2018-03-31 1382
[...]
2018-11-30 1342
2018-12-31 1337

如果我尝试按更多月重新采样,但分箱开始看起来不对。这在 6M

中尤为明显
df.resample("6M").sum()                                                           
sales
2018-01-31 1507
2018-07-31 8393
2019-01-31 7283

第一个 bin 跨越一个多月,最后一个 bin 到 future 一个月。也许我必须设置 closed="left" 以获得适当的限制:

df.resample("6M", closed="left").sum()                                            
sales
2018-06-30 8090
2018-12-31 9054
2019-06-30 39

现在我在 2019 年有一个额外的 bin,其中包含 2018-12-31 的数据...

这个工作正常吗?我是否遗漏了我应该设置的任何选项?

编辑:这是我期望以六个月为间隔对一年进行重采样的输出,第一个间隔从 1 月 1 日到 6 月 30 日,第二个间隔从 7 月 1 日到 12 月 31 日。

df.resample("6M", closed="left").sum()                                            
sales
2018-06-30 8090
2018-12-31 9093 # 9054 + 39

请注意,这里也有人怀疑 6 月 30 日的数据发生了什么,它是像我预期的那样进入第一个 bin 还是第二个?我的意思是最后一个垃圾箱很明显,但所有垃圾箱中可能都发生了同样的情况。

最佳答案

M 时间偏移别名表示 month end frequency .您需要的是 6MS,它是月份开始频率的别名:

df.resample('6MS').sum()

导致

            sales
2018-01-01 8130
2018-07-01 9563
2019-01-01 0

df.groupby(pd.Grouper(freq='6MS')).sum() 也可以互换使用。


为了更加清晰,您可以直接比较范围:

>>> pd.date_range('2018-01-01', '2018-12-31', freq='6M')
DatetimeIndex(['2018-01-31', '2018-07-31'], dtype='datetime64[ns]', freq='6M')

>>> pd.date_range('2018-01-01', '2018-12-31', freq='6MS')
DatetimeIndex(['2018-01-01', '2018-07-01'], dtype='datetime64[ns]', freq='6MS')

关于python - Pandas 时间序列重新采样,分箱似乎关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53700107/

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