Soy nuevo en pandas y por ahora no entiendo cómo organizar mi serie de tiempo, échale un vistazo:
date & time of connection 19/06/2017 12:39 19/06/2017 12:40 19/06/2017 13:11 20/06/2017 12:02 20/06/2017 12:04 21/06/2017 09:32 21/06/2017 18:23 21/06/2017 18:51 21/06/2017 19:08 21/06/2017 19:50 22/06/2017 13:22 22/06/2017 13:41 22/06/2017 18:01 23/06/2017 16:18 23/06/2017 17:00 23/06/2017 19:25 23/06/2017 20:58 23/06/2017 21:03 23/06/2017 21:05 Esta es una muestra de un conjunto de datos de 130 k raws, probé: df.groupby('date & time of connection')['date & time of connection'].apply(list)
Supongo que no es suficiente
Creo que debería :
¿Qué opinas de mi lógica? ¿Conoces algunos tutoriales? Muchísimas gracias
Puede usar dt.floor para convertir a date s y luego value_counts o groupby con size :
df = (pd.to_datetime(df['date & time of connection']) .dt.floor('d') .value_counts() .rename_axis('date') .reset_index(name='count')) print (df) date count 0 2017-06-23 6 1 2017-06-21 5 2 2017-06-19 3 3 2017-06-22 3 4 2017-06-20 2O:
s = pd.to_datetime(df['date & time of connection']) df = s.groupby(s.dt.floor('d')).size().reset_index(name='count') print (df) date & time of connection count 0 2017-06-19 3 1 2017-06-20 2 2 2017-06-21 5 3 2017-06-22 3 4 2017-06-23 6Horarios :
np.random.seed(1542) N = 220000 a = np.unique(np.random.randint(N, size=int(N/2))) df = pd.DataFrame(pd.date_range('2000-01-01', freq='37T', periods=N)).drop(a) df.columns = ['date & time of connection'] df['date & time of connection'] = df['date & time of connection'].dt.strftime('%d/%m/%Y %H:%M:%S') print (df.head()) In [193]: %%timeit ...: df['date & time of connection']=pd.to_datetime(df['date & time of connection']) ...: df1 = df.groupby(by=df['date & time of connection'].dt.date).count() ...: 539 ms ± 45.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) In [194]: %%timeit ...: df1 = (pd.to_datetime(df['date & time of connection']) ...: .dt.floor('d') ...: .value_counts() ...: .rename_axis('date') ...: .reset_index(name='count')) ...: 12.4 ms ± 350 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [195]: %%timeit ...: s = pd.to_datetime(df['date & time of connection']) ...: df2 = s.groupby(s.dt.floor('d')).size().reset_index(name='count') ...: 17.7 ms ± 140 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)Para asegurarse de que sus columnas estén en formato de fecha.
df['date & time of connection']=pd.to_datetime(df['date & time of connection'])Luego puedes agrupar los datos por fecha y hacer un conteo:
df.groupby(by=df['date & time of connection'].dt.date).count() Out[10]: date & time of connection date & time of connection 2017-06-19 3 2017-06-20 2 2017-06-21 5 2017-06-22 3 2017-06-23 6Oye, encontré una manera fácil de hacer esto con remuestreo.
# Set the date column as index column. df = df.set_index('your_date_column') # Make counts df_counts = df.your_date_column.resample('D').count()Aunque el nombre de su columna es largo y contiene espacios, lo que me da un poco de vergüenza. Usaría guiones en lugar de espacios.