python - datetimeindex - pandas timedelta
Rangos de fechas en Pandas (3)
En realidad, no hay una frecuencia de "día del mes" (por ejemplo, "DOMXX" como "DOM09"), pero no veo ninguna razón para no agregar una.
http://github.com/pydata/pandas/issues/2289
No tengo una solución simple para usted en este momento porque la resample
requiere pasar una regla de frecuencia conocida. Creo que debería aumentarse para poder tomar cualquier rango de fecha para ser usado como bordes de papelera arbitrarios, también. Solo es cuestión de tiempo y piratería ...
Después de pelear con NumPy y dateutil durante días, recientemente descubrí la increíble biblioteca de Pandas. He estado revisando la documentación y el código fuente, pero no puedo averiguar cómo obtener date_range()
para generar índices en los puntos de interrupción correctos.
from datetime import date
import pandas as pd
start = date(''2012-01-15'')
end = date(''2012-09-20'')
# ''M'' is month-end, instead I need same-day-of-month
date_range(start, end, freq=''M'')
Lo que quiero:
2012-01-15
2012-02-15
2012-03-15
...
2012-09-15
Lo que consigo:
2012-01-31
2012-02-29
2012-03-31
...
2012-08-31
Necesito porciones de un mes que tengan en cuenta la cantidad variable de días en un mes. Esto es posible con dateutil.rrule:
rrule(freq=MONTHLY, dtstart=start, bymonthday=(start.day, -1), bysetpos=1)
Feo e ilegible, pero funciona. ¿Cómo puedo hacer esto con los pandas? He jugado con date_range()
y period_range()
, hasta ahora sin suerte.
Mi objetivo real es usar groupby
, groupby
y / o resample
para calcular los valores para cada período en base a las sumas / medios / etc de las entradas individuales dentro del período. En otras palabras, quiero transformar los datos de:
total
2012-01-10 00:01 50
2012-01-15 01:01 55
2012-03-11 00:01 60
2012-04-28 00:01 80
#Hypothetical usage
dataframe.resample(''total'', how=''sum'', freq=''M'', start=''2012-01-09'', end=''2012-04-15'')
a
total
2012-01-09 105 # Values summed
2012-02-09 0 # Missing from dataframe
2012-03-09 60
2012-04-09 0 # Data past end date, not counted
Dado que los Pandas se originaron como una herramienta de análisis financiero, estoy virtualmente seguro de que hay una forma simple y rápida de hacerlo. Ayuda apreciada!
tratar
date_range(start, end, freq=pd.DateOffset(months=1))
freq=''M''
es para las frecuencias de fin de mes (ver here ). Pero puede usar .shift
para cambiarlo por cualquier número de días (o cualquier frecuencia):
pd.date_range(start, end, freq=''M'').shift(15, freq=pd.datetools.day)