【发布时间】:2019-05-11 00:35:54
【问题描述】:
当我注意到这个奇怪的分箱时,我正在用我想知道的关于 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 跨一个月到未来。也许我必须设置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 还是第二个 bin?我的意思是最后一个垃圾箱很明显,但所有垃圾箱都可能发生同样的情况。
【问题讨论】:
-
也许可以帮助this
-
@jezrael 感谢简单地看了看,与
closed、label和loffset一起玩,但我认为没有办法获得我期望的行为...... -
您能否补充质疑您的预期输出?我认为日期时间,如果可能的话也汇总数字
标签: python pandas time-series resampling