DataFrame.resample()关闭的行为不符合预期

时间:2018-03-16 10:04:08

标签: python pandas

首先,让我们每分钟创建一个样本数据:

>>> index = pd.date_range('1/1/2000', periods=60*24*400, freq='T')
>>> series = pd.Series(range(60*24*400), index=index)
>>> series.head()
2000-01-01 00:00:00    0
2000-01-01 00:01:00    1
2000-01-01 00:02:00    2
2000-01-01 00:03:00    3
2000-01-01 00:04:00    4

我可以看到closed重新采样到每日频率时的影响:

>>> series.resample('D', closed="right").head()
1999-12-31       0.0  # <-- here, I get some data labeled 1999
2000-01-01     720.5
2000-01-02    2160.5
2000-01-03    3600.5
2000-01-04    5040.5
Freq: D, dtype: float64
>>> series.resample('D', closed="left").head()
2000-01-01     719.5
2000-01-02    2159.5
2000-01-03    3599.5
2000-01-04    5039.5
2000-01-05    6479.5

这是我对the docs所期望的行为:

  

关闭:{'右','左'}

     

bin间隔的哪一边被关闭。

现在,如果我重新采样到每月频率:

>>> series.resample('M', closed="right").head()
2000-01-31     22319.5  # <-- ?
2000-02-29     65519.5
2000-03-31    108719.5
2000-04-30    152639.5
2000-05-31    196559.5
Freq: M, dtype: float64
>>> series.resample('M', closed="left").head()
2000-01-31     21599.5
2000-02-29     64079.5
2000-03-31    107279.5
2000-04-30    151199.5
2000-05-31    195119.5
Freq: M, dtype: float64

使用1999-12-31时,我怎么没有得到closed="right"样本?

>>> pd.__version__
'0.22.0'

1 个答案:

答案 0 :(得分:2)

这必须归因于label属性。您链接的文档将其描述为

  

标签:{'右','左'}   哪个bin边缘标签用于标记桶。对于除“M”,“A”,“Q”,“BM”,“BA”,“BQ”和“W”之外的所有频率偏移,默认值为“左”,其默认值均为“正确”。

尝试做:

series.resample('D', closed="right", label="right").head()

您会看到月和日的不同行为,因为默认标签是&#34;左&#34;对于D和&#34;对于M。