Claro que podría escribir esto yo mismo, pero antes de ir a reinventar la rueda ¿hay alguna función que ya lo haga?¿Hay una función de Python para determinar en qué trimestre del año se encuentra una fecha?
Respuesta
Dada una instancia x
de datetime.date, (x.month-1)//3
le dará el trimestre (0 para el primer trimestre, 1 para el segundo trimestre, etc., agregue 1 si necesita contar desde 1 en su lugar ;-).
Originalmente dos respuestas, se multiplican upvoted e incluso aceptados originalmente (ambos actualmente eliminada), fueron con errores - no hacer el -1
antes de la división, y dividiendo por 4 en lugar de 3. Desde .month
va del 1 al 12, es fácil comprobar por sí mismo qué fórmula es correcta:
for m in range(1, 13):
print m//4 + 1,
print
da 1 1 1 2 2 2 2 3 3 3 3 4
- dos trimestres de cuatro meses y un mes uno (EEP).
for m in range(1, 13):
print (m-1)//3 + 1,
print
da 1 1 1 2 2 2 3 3 3 4 4 4
- ahora no esta mirada mucho más preferible a usted -?)
Esto demuestra que la cuestión es bien justificado, creo ;-).
No creo que el módulo de fecha y hora necesariamente tenga todas las funciones calendáricas útiles, pero sé que tengo un (bien probado ;-) módulo datetools
para el uso de mis (y otros) proyectos en el trabajo , que tiene muchas funciones pequeñas para realizar todos estos cálculos calendáricos: algunos son complejos, otros simples, pero no hay razón para hacer el trabajo una y otra vez (incluso un trabajo simple) o cometer errores de riesgo en tales cálculos ;-).
Gracias Alex. Es por eso que debería haber una función. Mira cuántas personas lo entendieron mal. –
Creo que probó su punto. No es necesario contaminar toda la página con comentarios repetidos. –
@ Jason, sí, exactamente. Es por eso que voté por encima de tu pregunta una vez que vi las otras respuestas erróneas (actualmente eliminadas), a pesar de que alguien parece haber votado negativamente para contar mi voto positivo, ah bueno. –
hmmm modo que los cálculos pueden ir mal, aquí es una versión mejor (sólo para el bien de ella)
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]
los cálculos solo pueden salir mal si el cálculo es incorrecto. –
@RussBradberry en este caso puede estar en lo cierto, pero a veces la legibilidad y ser explícita cuenta y conduce a menos errores, en lugar de un cálculo breve –
@RussBradberry también ver respuestas eliminadas y comentarios sobre eso, ver un simple cálculo puede ser complicado para siempre programadores también y es difícil ver la corrección excepto al probarlo, en mi solución puede ver y asegurarse de que funcionará –
Yo sugeriría otra solución podría decirse más limpio. Si X es una instancia datetime.datetime.now()
, entonces el trimestre es:
import math
Q=math.ceil(X.month/3.)
ceil tiene que ser importados de módulo matemático, ya que no se puede acceder directamente.
El mejor hasta el momento. ¡Gracias una tonelada! – curlyreggie
Probablemente debería envolver esto en un int() – Pablojim
Como lo sugiere la respuesta de @garbanzio. Necesitaba poner el argumento del mes a través de la función float para hacer que esto funcione '' 'math.ceil (float (4)/3) = 2.0''' mientras' '' math.ceil (4/3) = 1.0' ' –
Esta es una pregunta antigua, pero aún digna de discusión.
Aquí está mi solución, utilizando el excelente módulo 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)
Así first_day
es el primer día del trimestre, y last_day
es el último día del trimestre (calculada al encontrar el primer día del próximo trimestre, menos de un día).
si m
es el número del mes ...
import math
math.ceil(float(m)/3)
SI ya está utilizando pandas
, es bastante simple.
import datetime as dt
import pandas as pd
quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1
Si usted tiene una columna date
en una trama de datos, puede crear fácilmente una nueva quarter
columna:
df['quarter'] = df['date'].dt.quarter
Para cualquiera que trate de obtener la cuarta parte de la fiscal años, que puede diferir desde el calendario año, escribí un módulo de Python para hacer esto.
La instalación es simple. Sólo tiene que ejecutar:
$ pip install fiscalyear
No hay dependencias, y fiscalyear
debería funcionar tanto para Python 2 y 3.
Se trata básicamente de una envoltura alrededor de la incorporada en el datetime módulo, por lo que cualquier datetime
comandos que ya está familiarizado con funcionará. He aquí una demostración:
>>> 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
está alojado en GitHub y PyPI. La documentación se puede encontrar en Read the Docs. Si está buscando funciones que actualmente no tiene, ¡hágamelo saber!
Aquí es una solución prolija, pero también puede leer que funcione para casos de fecha y hora y fecha
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
- 1. Python Pregunta: año y día del año hasta la fecha?
- 2. Determinar qué jarrones mínimos se necesitan para una función
- 3. La mejor manera de determinar si una secuencia se encuentra en otra secuencia en Python
- 4. php - encuentra la fecha para el mismo día de la semana del año pasado
- 5. ¿Cómo se calcula el día del año para una fecha específica en Objective-C?
- 6. ¿Cómo puedo determinar si una fecha se encuentra entre dos fechas en Java?
- 7. ¿Hay una función haskell para las fechas?
- 8. buscando en qué página se encuentra una cadena de búsqueda en un documento pdf usando python
- 9. Función para devolver la fecha de Pascua para el año dado
- 10. Analizando una cadena de fecha para obtener el año
- 11. jQuery: ¿no encuentra una función?
- 12. Python: ¿puede un decorador determinar si una función se está definiendo dentro de una clase?
- 13. Función para verificar si una cadena es una fecha
- 14. Determinar si la fecha de hoy se encuentra en un rango de dos fechas en IOS
- 15. ¿De qué maneras hay para editar una función en R?
- 16. ¿Cómo determinar si la variable es una función en Python?
- 17. php is_function() para determinar si una variable es una función
- 18. Usar solo el año como parte de una fecha para una condición DONDE
- 19. Semana del año C# de fecha y hora
- 20. ¿Hay una función como isdate() para datetime2?
- 21. ¿Hay una función en python para dividir una palabra en una lista?
- 22. ¿Cómo obtengo la primera fecha de un trimestre en MySQL?
- 23. ¿Por qué no hay una función para cada miembro para cada tipo de colección en stl?
- 24. Cómo imprimir el próximo año del año en curso en Python
- 25. Formatear fecha sin año
- 26. Python seleccione fecha aleatoria en el año actual
- 27. Una forma rápida de determinar si se encuentra un Componet en JPanel
- 28. Cómo determinar si una fecha está antes de otra
- 29. ¿Cómo se analiza una cadena de fecha HTTP en Python?
- 30. ¿Hay una función de error complementario escalada en python disponible?
pregunta muy justificada a pesar de que las primeras respuestas parecen un poco despectivo ("sólo una cuestión de", "parece bastante simple "): dos de las respuestas (¡incluida una UPVITED!) son horriblemente caóticas, mostrando que NO es tan simple o" simplemente "... –
Estoy seguro de que volverá y solucionará esto –