Tengo un rango de fechas

pd.bdate_range("2001-01-01", "2018-01-01")

Y desea encontrar el tercer día hábil del mes (ignore los días festivos por ahora). ¿Cómo puedo hacer eso?

0
freddy888 15 feb. 2018 a las 17:49

2 respuestas

La mejor respuesta

Plan: grupo por año, mes. Elija tercero con nth ().

Este ejemplo será más fácil con una serie:

dates = pd.Series(pd.bdate_range("2001-01-01", "2018-01-01"))
dates.groupby((dates.dt.year, dates.dt.month)).nth(3)

Salida parcial:

2001 1 2001-01-04 2 2001-02-06 3 2001-03-06 4 2001-04-05 5 2001-05-04 6 2001-06-06 7 2001-07-05 8 2001-08-06 9 2001-09-06 10 2001-10-04 11 2001-11-06 12 2001-12-06 2002 1 2002-01-04 2 2002-02-06 3 2002-03-06 4 2002-04-04

0
ChuHo 15 feb. 2018 a las 15:13

Como ya se encuentra en fechas hábiles, puede volver a muestrear al inicio del mes hábil ('BMS') y agregar una compensación de 3 días hábiles:

>>> pd.Series(index=pd.bdate_range("2001-01-01",
                    "2018-01-01")).resample('BMS').index + pd.datetools.BDay(3)

DatetimeIndex(['2001-01-04', '2001-02-06', '2001-03-06', '2001-04-05',
           '2001-05-04', '2001-06-06', '2001-07-05', '2001-08-06',
           '2001-09-06', '2001-10-04',
           ...
           '2017-04-06', '2017-05-04', '2017-06-06', '2017-07-06',
           '2017-08-04', '2017-09-06', '2017-10-05', '2017-11-06',
           '2017-12-06', '2018-01-04'],
          dtype='datetime64[ns]', length=205, freq=None)

Encontrará más detalles sobre cómo trabajar con fechas en pandas en documentación.

1
Mabel Villalba 15 feb. 2018 a las 15:23