Python: recuento de tiempo de horas de variables categóricas
Tengo un marco de datos de pandas con columnas ['DateTime', 'Variable']y estoy tratando de obtener un recuento continuo en la última hora para cada uno Variable. Thinking pivot podría usarse de alguna manera.
Data de muestra
DateTime Variable
8/24/19 3:30PM A
8/24/19 3:32PM A
8/24/19 3:36PM B
8/24/19 3:50PM C
8/25/19 2:50PM A
Rendimiento esperado
DateTime A B C
8/24/19 3:30PM 1 0 0
8/24/19 3:32PM 2 0 0
8/24/19 3:36PM 2 1 0
8/24/19 3:50PM 2 1 1
8/25/19 2:50PM 1 0 0
Se pueden agregar o eliminar nuevas variables, por lo que me gustaría tener una solución que sea dinámica.
Respuestas
Se podría, de hecho, comenzar con pivot, o hacerlo a mano con groupby.unstack.
Entonces está buscando df.rollingcrear ventanas móviles que se puedan agregar con muchas funciones. Para que las ventanas se creen con un timedelta (1 hora en este caso), debe asegurarse de que el índice sea de datetimetipo.
df['DateTime'] = pd.to_datetime(df['DateTime'])
out = (
df
.groupby(['DateTime', 'Variable']) # set the columns as index
.size() # aggregate by row count
.unstack(fill_value=0) # move 'Variable' index level to columns
.sort_index()
)
out = out.rolling('1h').sum()
Salida
Variable A B C
DateTime
2019-08-24 15:30:00 1.0 0.0 0.0
2019-08-24 15:32:00 2.0 0.0 0.0
2019-08-24 15:36:00 2.0 1.0 0.0
2019-08-24 15:50:00 2.0 1.0 1.0
2019-08-25 14:50:00 1.0 0.0 0.0
Considerando df es su conjunto de datos: new_df = df [df ['Variable'] == 'A']. Resample ('H'). Count ()
Puede crear un nuevo marco de datos de la siguiente manera: final_df = pd.DataFrame ({'DateTime': new_df.index, 'A': new_df.values})
De manera similar, tome el recuento para cada categoría de la columna Variable e intente concaminarlo con el bucle final_df.
No lo he probado, pero espero que funcione.