[python] 날짜가 어느 분기에 있는지 확인하는 Python 함수가 있습니까?

물론 내가 직접 작성할 수는 있지만 바퀴를 재발 명하기 전에 이미이 작업을 수행하는 함수가 있습니까?



답변

인스턴스 감안할 xdatetime.date , (x.month-1)//3당신이 😉 대신 1에서 계산해야하는 경우 하나를 추가 – 등, 2 분기, 1 분기 당신이 1 분기 (0을 줄 것이다.


원래 두 개의 답변, 곱하기 upvoted 및 원래 수락 된 (현재 모두 삭제됨)은 버그가있었습니다 -1. 나눗셈 이전을 수행하지 않고 3 대신 4로 나누었습니다. .month1에서 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

종속성이 없으며 fiscalyearPython 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)

fiscalyearGitHubPyPI 에서 호스팅됩니다 . 문서는 문서 읽기에서 찾을 수 있습니다 . 현재 가지고 있지 않은 기능을 찾고 있다면 알려주세요!


답변

다음은 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