Pandas / Python Tirando de final de mes filas de trama de datos en trama de datos separada

votos
0

Actualmente tengo una trama de datos de series de tiempo de la siguiente manera:

dfMain =

          Date  Portfolio Value
0   2016-07-01     1.000000e+06
1   2016-07-08     1.025168e+06
2   2016-07-15     1.028053e+06
3   2016-07-22     1.024184e+06
4   2016-07-29     1.022491e+06
5   2016-08-05     1.023241e+06
6   2016-08-12     1.030325e+06
7   2016-08-19     1.032742e+06
8   2016-08-26     1.032567e+06
9   2016-09-02     1.028614e+06
10  2016-09-09     9.930876e+05
11  2016-09-16     9.956875e+05
12  2016-09-23     1.010174e+06
13  2016-09-30     1.010388e+06
14  2016-10-07     1.004989e+06
15  2016-10-14     9.924929e+05
16  2016-10-21     9.969708e+05
17  2016-10-28     9.816373e+05
18  2016-11-04     9.563689e+05
19  2016-11-11     9.869579e+05
20  2016-11-18     9.936929e+05
21  2016-11-25     1.009625e+06 

Dado que la trama de datos puede ser diferente (no se puede simplemente sacar filas específicas de ejemplo) lo que sería la mejor manera de tirar el más cercano al final de mes las fechas de la trama de datos? por ejemplo, el índice 4 se retiró debido a que es el más cercano a la fecha de fin de mes.

¡Algún consejo sería de gran aprecio!

Publicado el 30/05/2018 a las 11:49
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

Es necesario para ordenar las fechas y luego encontrar el último valor para cada grupo.

df['Date'] = pd.to_datetime(df['Date'])
grp = df.sort_values('Date').groupby(df['Date'].dt.month)
pd.DataFrame([grp.get_group(x).iloc[-1] for x in grp.groups])

Salida:

        Date    Portfolio Value
4   2016-07-29  1022491.0
8   2016-08-26  1032567.0
13  2016-09-30  1010388.0
17  2016-10-28  981637.3
21  2016-11-25  1009625.0
Respondida el 30/05/2018 a las 11:55
fuente por usuario

votos
2

Grupo en el número del mes y encontrar el último registro:

df.Date = pd.to_datetime(df.Date, errors='coerce')
df.groupby(df.Date.dt.month).last()

           Date  Portfolio Value
Date                            
7    2016-07-29        1022491.0
8    2016-08-26        1032567.0
9    2016-09-30        1010388.0
10   2016-10-28         981637.3
11   2016-11-25        1009625.0

Si las filas no se ordenan por fecha, llamar sort_valuesprimero:

df.sort_values('Date').groupby(df.Date.dt.month).last()

           Date  Portfolio Value
Date                            
7    2016-07-29        1022491.0
8    2016-08-26        1032567.0
9    2016-09-30        1010388.0
10   2016-10-28         981637.3
11   2016-11-25        1009625.0

En caso de trabajar en cualquier caso.

Si usted tiene fechas que abarcan múltiples años, mejor GroupBy en el año-mes:

df.sort_values('Date').groupby([df.Date.dt.year, df.Date.dt.month]).last()
Respondida el 30/05/2018 a las 11:55
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more