Cambiar formato fecha ymd_hms a ymd

publicado por: Anonymous

Tengo un dataframeen Pythoncon dos columnas: StartTime y StopTime. En una de las operaciones, necesito agrupar por día los datos (StartTime). Para ello necesito eliminar de esa columna las horas, minutos, segundos…

Los datos que actualmente tiene son de esta forma:

StartTime
2019-09-01 20:47:50
2019-09-01 22:47:50
2019-09-02 20:47:50

Y quiero que queden:

StartTime
2019-09-01
2019-09-01
2019-09-02

Para finalmente agrupar y contar el número de observaciones por día. En Res muy sencillo con as_date()y luego agrupando por StartTimey añadiendo una columna con n().

No encuentro la forma de hacerlo con Pythony pandas.

solución

No necesita eliminar para nada las horas si no quieres, basta con agrupar por fecha. Basándome en el DataFrame de tu pregunta anterior he creado el siguiente ejemplo:

from io import StringIO
import pandas as pd


datos =datos = StringIO('''
Target  Observer                 StartTime                  StopTime                                                         
Target1      RT1   2019-09-01 20:47:50.020   2019-09-01 20:57:50.020
Target1      RT1   2019-09-01 20:47:50.020   2019-09-01 20:57:50.020
Target1      RT1   2019-09-01 20:47:50.020   2019-09-01 20:57:50.020
Target1      RT2   2019-09-01 20:47:50.020   2019-09-01 20:57:50.020
Target1      RT2   2019-09-01 20:47:50.020   2019-09-01 20:57:50.020
Target1      RT1   2019-09-02 03:20:10.210   2020-10-15 04:01:48.210
Target1      RT1   2019-09-02 03:20:10.210   2020-10-15 04:01:48.210
Target1      RT2   2019-09-02 03:20:10.210   2020-10-15 04:01:48.210
Target1      RT2   2019-09-02 17:47:13.370   2019-03-14 17:57:21.520
Target1      RT2   2019-09-02 13:15:35.030   2019-12-27 14:57:14.520
''')

df = pd.read_table(datos, sep='ss+',engine='python' ,parse_dates=['StartTime','StopTime'])

Lo que quieres es agrupar por observador y por fecha de inicio contando el número de observaciones por observador y dia. Podemos valernos de pandas.DataFrame.groupby para agrupar por observador y día y usar el método agg para crear una nueva columna con el recuento. El resultado es una nueva columna con el número de observaciones que existen por cada observador en un dia:

res = df.set_index('StartTime').groupby(['Observer', pd.TimeGrouper('D')]).agg({'Observer': 'count'}).rename(columns={'Observer':'Obs'})

Salida:

>>> res
                        Obs
Observer StartTime         
RT1      2019-09-01       3
         2019-09-02       2
RT2      2019-09-01       2
         2019-09-02       3
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *