Trazar el número de ocurrencias de Pandas DataFrame

Tengo un DataFrame con dos columnas. Una de ellas contiene marcas de tiempo y otra una identificación de acción. Algo como eso:

2000-12-29 00:10:00 action1 2000-12-29 00:20:00 action2 2000-12-29 00:30:00 action2 2000-12-29 00:40:00 action1 2000-12-29 00:50:00 action1 ... 2000-12-31 00:10:00 action1 2000-12-31 00:20:00 action2 2000-12-31 00:30:00 action2 

Me gustaría saber cuántas acciones de cierto tipo se han realizado en un día determinado. Es decir, para cada día, debo contar el número de ocurrencias de actionX y trazar estos datos con la fecha en el eje X y la cantidad de ocurrencias de actionX en los ejes Y, para cada fecha.

Por supuesto, puedo contar las acciones de cada día ingenuamente con solo iterar a través de mi conjunto de datos. Pero, ¿cuál es la “manera correcta” de hacer con pandas / matplotlib?

Empezando desde

  mydate col_name 0 2000-12-29 00:10:00 action1 1 2000-12-29 00:20:00 action2 2 2000-12-29 00:30:00 action2 3 2000-12-29 00:40:00 action1 4 2000-12-29 00:50:00 action1 5 2000-12-31 00:10:00 action1 6 2000-12-31 00:20:00 action2 7 2000-12-31 00:30:00 action2 

Tu puedes hacer

 df['mydate'] = pd.to_datetime(df['mydate']) df = df.set_index('mydate') df['day'] = df.index.date counts = df.groupby(['day', 'col_name']).agg(len) 

Pero tal vez hay una manera aún más sencilla. Lo anterior debería funcionar de todos modos.

Si quieres usar los recuentos como un DataFrame, entonces lo transformaría de nuevo

 counts = pd.DataFrame(counts, columns=['count']) 

Puedes obtener los conteos usando

 df.groupby([df.index.date, 'action']).count() 

o puedes trazar directamente usando este método

 df.groupby([df.index.date, 'action']).count().plot(kind='bar') 

También puede simplemente almacenar los resultados para count y luego trazarlos por separado. Esto es asumiendo que su índice ya está en el formato datetimeindex, de lo contrario, siga las instrucciones de @mkln arriba.