gerar séries temporais por trimestre, incremento de um quarto

Eu olhei através da arrow e docs python, não parece ser nada que incrementalmente passos por trimestre. Por exemplo, o seguinte código fornece incrementalmente o mês, dado um mês inicial até agora. Olhando através da arrow docs, final do mês é conveniente. alguma coisa lá fora que faz trimestralmente?

 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") 

Eu estou procurando uma solução que passo por trimestre até agora

input: 14Q3

saída:

 14Q3 14Q4 15Q1 15Q2 15Q3 

Para obter o trimestre atual, use: (month - 1) // 3 + 1 . Para gerar trimestres no intervalo especificado:

 from datetime import date def generate_quarters(start, end): while start < end: #NOTE: not including *end* yield start start = start.increment() start = Quarter.from_string('14Q3') end = Quarter.from_date(date.today()) print("\n".join(map(str, generate_quarters(start, end)))) 

onde Quarter é uma subclass simples com um namedtuple :

 from collections import namedtuple class Quarter(namedtuple('Quarter', 'year quarter')): __slots__ = () @classmethod def from_string(cls, text): """Convert 'NQM' into Quarter(year=2000+N, quarter=M).""" year, quarter = map(int, text.split('Q')) return cls(year + 2000, quarter) @classmethod def from_date(cls, date): """Create Quarter from datetime.date instance.""" return cls(date.year, (date.month - 1) // 3 + 1) def increment(self): """Return the next quarter.""" if self.quarter < 4: return self.__class__(self.year, self.quarter + 1) else: assert self.quarter == 4 return self.__class__(self.year + 1, 1) def __str__(self): """Convert to "NQM" text representation.""" return "{year}Q{quarter}".format(year=self.year-2000, quarter=self.quarter) 

Saída

 14Q3 14Q4 15Q1 15Q2 15Q3 

O trimestre atual ( 15Q4 ) não está incluso.

não é bonito, mas funciona

 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") b=[(x[1].date().month-1)//3 for x in a] c=[] for i in range(0,len(b),3): c.append(str(a[i][1].year)[2:]+"Q"+str(b[i]))