resample datetimeindex python pandas datetime time-series

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)