일 년 중 어느 분기에 날짜가 있는지 확인하는 기능이 있습니까?
물론 제가 직접 작성할 수도 있지만, 바퀴를 재창조하기 전에 이미 이 기능을 수행할 수 있는 것이 있습니까?
예를 들면,x
datetime.date의 경우(x.month-1)//3
분기를 표시합니다(1/4분기에는 0, 2/4분기에는 1 등). 대신 1부터 계산해야 할 경우 1을 추가합니다;-).
원래 두 개의 답변, 즉 다중 투표 및 심지어 원래 승인된(둘 다 현재 삭제됨) 버그였습니다. -- 하지 않았습니다.-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
두 개의 4개월 분기와 한 개의 1개월 분기(예약).
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가 a인 경우datetime.datetime.now()
예를 들어, 분기는 다음과 같습니다.
import math
Q=math.ceil(X.month/3.)
ceil은 직접 접근할 수 없기 때문에 수학 모듈에서 가져와야 합니다.
회계 연도의 4분의 1을 얻으려는 사람들을 위해 이를 수행하기 위해 파이썬 모듈을 작성했습니다.
설치는 간단합니다.그냥 실행:
$ pip install fiscalyear
종속성은 없습니다.fiscalyear
Python 2와 3 모두에서 작동해야 합니다.
기본적으로 내장된 날짜/시간 모듈 주변의 래퍼입니다.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에서 호스팅됩니다.설명서는 문서 읽기에서 찾을 수 있습니다.현재 제공되지 않는 기능을 찾으시면 알려주세요!
이것은 매우 간단하고 python3에서 작동합니다.
from datetime import datetime
# Get current date-time.
now = datetime.now()
# Determine which quarter of the year is now. Returns q1, q2, q3 or q4.
quarter_of_the_year = f'q{(now.month-1)//3+1}'
한다면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
판다를 사용하여 회계연도 분기 데이터를 찾고 있는 사람들을 위해,
import datetime
import pandas as pd
today_date = datetime.date.today()
quarter = pd.PeriodIndex(today_date, freq='Q-MAR').strftime('Q%q')
참조: 판다 기간 지수
다음은 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_quarter(d))
d2 = d - timedelta(90)
print(d2.strftime("%Y-%m-%d"), get_quarter(d2))
d3 = d - timedelta(180 + 365)
print(d3.strftime("%Y-%m-%d"), get_quarter(d3))
출력은 다음과 같습니다.
2019-02-14 Q1_2019
2018-11-16 Q4_2018
2017-08-18 Q3_2017
이것은 오래된 질문이지만 여전히 논의할 가치가 있습니다.
우수한 dateutil 모듈을 사용한 제 솔루션이 여기 있습니다.
from dateutil import rrule,relativedelta
year = this_date.year
quarters = rrule.rrule(rrule.MONTHLY,
bymonth=(1,4,7,10),
bysetpos=-1,
dtstart=datetime.datetime(year,1,1),
count=8)
first_day = quarters.before(this_date)
last_day = (quarters.after(this_date)
-relativedelta.relativedelta(days=1)
그렇게first_day
분기의 첫 번째 날이고,last_day
분기의 마지막 날입니다(다음 분기의 첫 번째 날을 찾아 하루를 뺀 값으로 계산).
x/3+1과 x/4+1로 솔루션을 시도했는데 어느 경우든 쿼터가 틀립니다.정답은 다음과 같습니다.
for i in range(1,13):
print(((i-1)//3)+1)
import datetime
def get_quarter_number_and_date_from_choices(p_quarter_choice):
"""
:param p_quarter_choice:
:return:
"""
current_date = datetime.date.today()
# current_quarter = current_date.month - 1 // 3 + 1
if p_quarter_choice == 'Q1':
quarter = 1
q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
q_end_date = datetime.datetime(current_date.year, 3 * quarter + 1, 1) + datetime.timedelta(days=-1)
return q_start_date, q_end_date
elif p_quarter_choice == 'Q2':
quarter = 2
q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
q_end_date = datetime.datetime(current_date.year, 3 * quarter + 1, 1) + datetime.timedelta(days=-1)
return q_start_date, q_end_date
elif p_quarter_choice == 'Q3':
quarter = 3
q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
q_end_date = datetime.datetime(current_date.year, 3 * quarter + 1, 1) + datetime.timedelta(days=-1)
return q_start_date, q_end_date
elif p_quarter_choice == 'Q4':
quarter = 4
q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
q_end_date = datetime.datetime(current_date.year, 3 * quarter, 1) + datetime.timedelta(days=30)
return q_start_date, q_end_date
return None
흠, 계산이 잘못될 수 있습니다, 여기 더 좋은 버전이 있습니다(그냥 그것을 위해).
first, second, third, fourth=1,2,3,4# you can make strings if you wish :)
quarterMap = {}
quarterMap.update(dict(zip((1,2,3),(first,)*3)))
quarterMap.update(dict(zip((4,5,6),(second,)*3)))
quarterMap.update(dict(zip((7,8,9),(third,)*3)))
quarterMap.update(dict(zip((10,11,12),(fourth,)*3)))
print quarterMap[6]
다음은 날짜 시간 및 날짜 인스턴스에 사용할 수 있는 상세하지만 읽기 쉬운 솔루션입니다.
def get_quarter(date):
for months, quarter in [
([1, 2, 3], 1),
([4, 5, 6], 2),
([7, 8, 9], 3),
([10, 11, 12], 4)
]:
if date.month in months:
return quarter
사전을 사용하여, 당신은 이것을 해낼 수 있습니다.
def get_quarter(month):
quarter_dictionary = {
"Q1" : [1,2,3],
"Q2" : [4,5,6],
"Q3" : [7,8,9],
"Q4" : [10,11,12]
}
for key,values in quarter_dictionary.items():
for value in values:
if value == month:
return key
print(get_quarter(3))
for m in range(1, 13):
print ((m*3)//10)
@Alex Marteli 공식을 사용하고 질문에 따라 빠른 함수를 만드는 재검토된 솔루션.
from datetime import timedelta, date
date_from = date(2021, 1, 1)
date_to = date(2021, 12, 31)
get_quarter = lambda dt: (dt.month-1)//3 + 1
quarter_from = get_quarter(date_from)
quarter_to = get_quarter(date_to)
print(quarter_from)
print(quarter_to)
# 1
# 4
def euclid(a,b):
r = a % b
q = int( ( (a + b - 1) - (a - 1) % b ) / b )
return(q,r)
months_per_year = 12
months_per_quarter = 3
for i in range(months_per_year):
print(i+1,euclid(i+1,months_per_quarter)[0])
#1 1
#2 1
#3 1
#4 2
#5 2
#6 2
#7 3
#8 3
#9 3
#10 4
#11 4
#12 4
언급URL : https://stackoverflow.com/questions/1406131/is-there-a-function-to-determine-which-quarter-of-the-year-a-date-is-in
'programing' 카테고리의 다른 글
mariadb의 JSON_SET에 있는 와일드카드 대안 (0) | 2023.07.24 |
---|---|
SQL 화학: 날짜 필드를 필터링하는 방법은 무엇입니까? (0) | 2023.07.19 |
Oracle에서 행의 sha1-hash (0) | 2023.07.19 |
Grails3 파일 업로드 maxFileSize 제한 (0) | 2023.07.19 |
python numpy 시스템 엡실론 (0) | 2023.07.19 |