Tengo apandas trama de datos donde hay una columna llamada "fecha", que está en el formato de YYQQ, por ejemplo, 1702.
La columna es una serie de tiempo. Sin embargo, hay algunas observaciones que faltan. Por ejemplo, a continuación se interrumpe la trama de datos a la fecha de 1702. Tengo varias tramas de datos de este tipo y cada interrumpido en diferentes fechas. Yo sólo quiero conseguir la fecha después de la interrupción. En el ejemplo de abajo, yo sólo quiero filas en y después del 1702. ¿Hay una manera fácil y Pythonic para hacerlo?
date
1301
1302
1303
1304
1401
1702
1703
1704
1801
1802
En primer lugar, vamos a volver a crear la trama de datos y crear nuevas columnas para representar el año ( YY
) y cuarto ( QQ
) para cada fecha respectiva:
import pandas as pd
df = pd.DataFrame({'date': [1301,1302,1303,1304,1401,1702,1703,1704,1801,1802]})
df[['YY','QQ']] = df['date'].astype(str).str.extract(r'(\d{2})(\d{2})')
Ahora tenemos:
date YY QQ
0 1301 13 01
1 1302 13 02
2 1303 13 03
3 1304 13 04
4 1401 14 01
5 1702 17 02
6 1703 17 03
7 1704 17 04
8 1801 18 01
9 1802 18 02
Vamos a convertir cada trimestre con un mes de ese trimestre y entonces pueden reconvertir en una datetime
serie y encontrar la primera diferencia de tiempo que excede 3 meses. Finalmente, podemos cortar la trama de datos de acuerdo con el primer índice que satisface esta máscara booleana (es decir, la interrupción):
df['MM'] = df['QQ'].astype(int)*3
df['date_t'] = pd.to_datetime(df['YY'].astype(str)+df['MM'].astype(str), format='%y%m')
df.iloc[df[df['date_t'].diff().astype('timedelta64[M]')>3].index[0]:]
Los rendimientos:
date YY QQ MM date_t
5 1702 17 02 6 2017-06-01
6 1703 17 03 9 2017-09-01
7 1704 17 04 12 2017-12-01
8 1801 18 01 3 2018-03-01
9 1802 18 02 6 2018-06-01