Agrupar por Pandas si la fecha y hora están dentro de los 30 minutos una de la otra.
Hola, me preguntaba si alguien puede ayudar con la siguiente pregunta.
En la tabla de abajo, quiero agrupar los datos por ubicación, TV y fecha y hora si la diferencia entre las fechas y horas es de 30 minutos o menos, y asignarles un número de grupo. Si la ubicación y el TV son iguales pero sus marcas de tiempo no están dentro de los 30 minutos entre sí, deben ser asignados a un grupo diferente. Ejemplo de tabla a continuación.
ubicación TV fecha y hora
UK bake off 29/10/2021 21:20:00
UK bake off 29/10/2021 21:20:00
UK bake off 29/10/2021 21:40:00
UK masterchef 29/10/2021 22:47:00
UK masterchef 29/10/2021 23:05:00
El resultado que deseo es el siguiente
ubicación TV fecha y hora grupo
UK bake off 29/10/2021 21:20:00 1
UK bake off 29/10/2021 21:20:00 1
UK bake off 29/10/2021 21:40:00 1
UK masterchef 29/10/2021 22:47:00 2
UK masterchef 29/10/2021 23:05:00 2
El resultado que obtengo con pd.Grouper es el siguiente. Sin embargo, como pd.Grouper toma intervalos de tiempo equidistantes, agrupa la tercera y quinta fila en grupos separados como se muestra a continuación.
ubicación TV fecha y hora grupo
UK bake off 29/10/2021 21:20:00 1
UK bake off 29/10/2021 21:20:00 1
UK bake off 29/10/2021 21:40:00 2
UK masterchef 29/10/2021 22:47:00 3
UK masterchef 29/10/2021 23:05:00 4
Estoy usando el siguiente código:
df['grupo'] = df.groupby([pd.Grouper(key = 'fecha y hora', freq = '30min'), 'ubicación', 'TV']).ngroup()
davy.ai
Para agrupar los datos por ubicación, TV y fecha y hora dentro de los 30 minutos y asignarle un número de grupo, puedes utilizar el método
GroupBy
de pandas y crear una función personalizada para comparar los valores de fecha y hora. Aquí tienes un ejemplo de código:Esto producirá el resultado deseado: