물론 내가 직접 작성할 수는 있지만 바퀴를 재발 명하기 전에 이미이 작업을 수행하는 함수가 있습니까?
답변
인스턴스 감안할 x
의 datetime.date , (x.month-1)//3
당신이 😉 대신 1에서 계산해야하는 경우 하나를 추가 – 등, 2 분기, 1 분기 당신이 1 분기 (0을 줄 것이다.
원래 두 개의 답변, 곱하기 upvoted 및 원래 수락 된 (현재 모두 삭제됨)은 버그가있었습니다 -1
. 나눗셈 이전을 수행하지 않고 3 대신 4로 나누었습니다. .month
1에서 12까지 이동 하므로 수식이 무엇인지 직접 확인하기 쉽습니다. 권리:
for m in range(1, 13):
print m//4 + 1,
print
제공 1 1 1 2 2 2 2 3 3 3 3 4
-2 개의 4 개월 분기 및 1 개월 1 (eep).
for m in range(1, 13):
print (m-1)//3 + 1,
print
제공합니다 1 1 1 2 2 2 3 3 3 4 4 4
-이제 이것이 당신에게 훨씬 더 선호되지 않습니까?-)
이것은 질문이 정당하다는 것을 증명한다고 생각합니다 .-).
나는 datetime 모듈이 가능한 모든 유용한 캘린더 기능을 반드시 가져야한다고 생각하지는 않지만, datetools
직장에서 내 (그리고 다른 사람의) 프로젝트를 사용하기 위해 (잘 테스트 된 😉 모듈을 유지하고 있다는 것을 알고 있습니다. 이러한 모든 캘린더 계산을 수행하는 함수-일부는 복잡하고 일부는 간단하지만 반복적으로 작업 할 이유가 없거나 (심지어 단순한 작업 일지라도) 그러한 계산에서 버그를 위험에 빠뜨릴 이유가 없습니다 .-).
답변
이미을 사용 pandas
하고 있다면 매우 간단합니다.
import datetime as dt
import pandas as pd
quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1
date
데이터 프레임에 열 이있는 경우 새 quarter
열을 쉽게 만들 수 있습니다 .
df['quarter'] = df['date'].dt.quarter
답변
나는 또 다른 더 깨끗한 해결책을 제안 할 것이다. X가 datetime.datetime.now()
인스턴스 인 경우 분기는 다음과 같습니다.
import math
Q=math.ceil(X.month/3.)
ceil은 직접 액세스 할 수 없으므로 math 모듈에서 가져와야합니다.
답변
달력 연도 와 다를 수 있는 회계 연도 의 분기를 얻으려는 사람을 위해이 작업을 수행하는 Python 모듈을 작성했습니다.
설치가 간단합니다. 그냥 실행 :
$ pip install fiscalyear
종속성이 없으며 fiscalyear
Python 2와 3 모두에서 작동합니다.
기본적으로 내장 datetime 모듈을 둘러싼 래퍼 이므로 datetime
이미 익숙한 모든 명령이 작동합니다. 다음은 데모입니다.
>>> from fiscalyear import *
>>> a = FiscalDate.today()
>>> a
FiscalDate(2017, 5, 6)
>>> a.fiscal_year
2017
>>> a.quarter
3
>>> b = FiscalYear(2017)
>>> b.start
FiscalDateTime(2016, 10, 1, 0, 0)
>>> b.end
FiscalDateTime(2017, 9, 30, 23, 59, 59)
>>> b.q3
FiscalQuarter(2017, 3)
>>> b.q3.start
FiscalDateTime(2017, 4, 1, 0, 0)
>>> b.q3.end
FiscalDateTime(2017, 6, 30, 23, 59, 59)
fiscalyear
GitHub 및 PyPI 에서 호스팅됩니다 . 문서는 문서 읽기에서 찾을 수 있습니다 . 현재 가지고 있지 않은 기능을 찾고 있다면 알려주세요!
답변
다음은 datetime.datetime 객체를 가져오고 분기별로 고유 한 문자열을 반환하는 함수의 예입니다.
from datetime import datetime, timedelta
def get_quarter(d):
return "Q%d_%d" % (math.ceil(d.month/3), d.year)
d = datetime.now()
print(d.strftime("%Y-%m-%d"), get_q(d))
d2 = d - timedelta(90)
print(d2.strftime("%Y-%m-%d"), get_q(d2))
d3 = d - timedelta(180 + 365)
print(d3.strftime("%Y-%m-%d"), get_q(d3))
출력은 다음과 같습니다.
2019-02-14 Q1_2019
2018-11-16 Q4_2018
2017-08-18 Q3_2017
답변
m
월 숫자 라면 …
import math
math.ceil(float(m) / 3)
답변
이 방법은 모든 매핑에 적용됩니다.
month2quarter = {
1:1,2:1,3:1,
4:2,5:2,6:2,
7:3,8:3,9:3,
10:4,11:4,12:4,
}.get
방금 함수를 생성했습니다. int->int
month2quarter(9) # returns 3
이 방법은 또한 완벽합니다.
month2quarter(-1) # returns None
month2quarter('July') # returns None