以数字形式给出一个月(例如,2月为2),您如何找到其各自季度的第一个月(例如,1月份为1)?
我阅读了datetime模块文档和他们的日期时间函数的Pandas文档,它们应该是相关的,但我找不到解决这个问题的函数.
基本上,我想要了解的是我如何能够生成类似下面的函数,给定月x,输出对应于x季度的第一个月的数字.
>> first_month_quarter(5)
4
Run Code Online (Sandbox Code Playgroud) 我已经建立了一个功能,以获得当前季度的第一天和最后一天,但它有点长.我想知道,有没有更简洁的方法来完成这个?
我知道它pandas有一个QuarterBegin()功能,但我无法以更简洁的方式实现它.
import datetime as dt
from dateutil.relativedelta import relativedelta
def get_q(first=None,last=None):
today = dt.date.today()
qmonth = [1, 4, 7, 10]
if first:
for i,v in enumerate(qmonth):
if (today.month-1)//3 == i:
return dt.date(today.year,qmonth[i],1).strftime("%Y-%m-%d")
if last:
firstday = dt.datetime.strptime(get_q(first=True),"%Y-%m-%d")
lastday = firstday + relativedelta(months=3, days=-1)
return lastday.strftime("%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)
编辑:如果这更适合代码审查,请告诉我
我查看了arrow和python文档,似乎没有逐步逐步增加的任何东西.例如,以下代码以递增的方式为您提供月份,给定起始月份.通过arrow文档查看,月末很方便.有什么季度的吗?
import arrow
from datetime import datetime
a=arrow.Arrow.span_range('month', datetime(2012,7,1,0,0),datetime.now() )
for i in a:
print i[1].floor('day').datetime.strftime("%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个到目前为止逐个季度的解决方案
输入: 14Q3
输出:
14Q3
14Q4
15Q1
15Q2
15Q3
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,有两个有用的列1)会计年度,2)日期.我想添加一个显示财政季度的新列.
仅供参考 - 英国财政年度为4月1日至3月31日
我的数据看起来像:
fiscal year date
FY15/16 2015-11-01
FY14/15 2014-10-01
FY15/16 2016-02-01
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
fiscal year date Quarter
FY15/16 2015-11-01 q3
FY14/15 2014-10-01 q3
FY15/16 2016-02-01 q4
Run Code Online (Sandbox Code Playgroud)
真的希望我的季度合适!
下面的代码有效,但我相信它会回归美国的金融区,但我想要英国.
df['Quater'] = df['Date'].dt.quarter
Run Code Online (Sandbox Code Playgroud)