Pandas QuarterBegin(): 计算季度首日时可能存在的Bug

3

我想在pandas数据框中计算“季度初”。但是我遇到了一些问题。我的Pandas版本是0.17.1

import pandas as pd
import datetime as dt

test=pd.Timestamp(dt.datetime(2011,1,20))
test=test.tz_localize('Europe/Rome')

previousquarter=test-pd.tseries.offsets.QuarterBegin()
nextquarter=test+pd.tseries.offsets.QuarterBegin()

我的期望结果是previousquarter = (2011,1,1)nextquarter = (2011,4,1)。但我得到的是previousquarter = (2010,12,1)nextquarter = (2011,3,1)
我也尝试过不使用tz_localize,但结果并没有改变。
我在这里做错了什么还是有bug?提前感谢!
P.S. 我知道可以通过移动一个月来纠正它,但这似乎是一种相当粗糙的解决方法。
3个回答

3

0

Marshall 给出的答案对我很有帮助,除了每年的第一天,它指向上一年度最后一个季度的第一天。例如,在 2018-01-01,我得到的是 2017-10-01。

我必须按照以下方式处理:

(date + pd.tseries.offsets.DateOffset(days=1)) - pd.tseries.offsets.QuarterBegin(startingMonth=1) 

其中date是一个datetime.datetime对象。


0

复现了 @Abhi 在 Pandas 1.1.3 中的错误。实际上,在季度内的所有起始日期中,无法从 QuarterEnd 或 QuarterBegin 获取一致的结果。因此,我们转而去到前一个季度的末尾并添加一天,或者到下一个季度的开始并减去一天。请注意 QuarterEnd(startingMonth=12)。

import pandas as pd
print("     date           Quarter   Quarter begin      Quarter end   ")
for yr in range(2020, 2021):
  for mo in range(1,13):
    for dy in range(1,4):
        date = pd.Timestamp(yr, mo, dy)
        if dy == 3:
            date = date + pd.tseries.offsets.MonthEnd()
        qbegin = date + pd.offsets.QuarterEnd(-1, startingMonth=12) + pd.offsets.Day(1)
        qend = date + pd.offsets.QuarterBegin(1, startingMonth=1) - pd.offsets.Day(1)
        print("{}   {}   {}   {}".format(date, date.quarter, qbegin, qend))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接