Un histogtwig por hora de datetime utilizando Pandas.

Supongamos que tengo una columna de marca de tiempo de datetime en un pandas.DataFrame . Por ejemplo, la marca de tiempo está en segundos de resolución. Me gustaría compartir los eventos en 10 minutos [1] grupos / contenedores. Entiendo que puedo representar la datetime y datetime como una marca de tiempo entera y luego usar el histogtwig. ¿Hay un enfoque más simple? ¿Algo incorporado en los pandas ?

[1] 10 minutos es solo un ejemplo. En última instancia, me gustaría usar diferentes resoluciones.

Para usar una frecuencia personalizada como “10Min”, debe usar un TimeGrouper , como lo sugiere @johnchase, que opera en el index .

 # Generating a sample of 10000 timestamps and selecting 500 to randomize them df = pd.DataFrame(np.random.choice(pd.date_range(start=pd.to_datetime('2015-01-14'),periods = 10000, freq='S'), 500), columns=['date']) # Setting the date as the index since the TimeGrouper works on Index, the date column is not dropped to be able to count df.set_index('date', drop=False, inplace=True) # Getting the histogram df.groupby(pd.TimeGrouper(freq='10Min')).count().plot(kind='bar') 

introduzca la descripción de la imagen aquí

Usando to_period

También es posible utilizar el método to_period pero no funciona, por lo que sé, con un período personalizado como “10Min”. Este ejemplo toma una columna adicional para simular la categoría de un elemento.

 # The number of sample nb_sample = 500 # Generating a sample and selecting a subset to randomize them df = pd.DataFrame({'date': np.random.choice(pd.date_range(start=pd.to_datetime('2015-01-14'),periods = nb_sample*30, freq='S'), nb_sample), 'type': np.random.choice(['foo','bar','xxx'],nb_sample)}) # Grouping per hour and type df = df.groupby([df['date'].dt.to_period('H'), 'type']).count().unstack() # Droping unnecessary column level df.columns = df.columns.droplevel() df.plot(kind='bar') 

introduzca la descripción de la imagen aquí