tablas recorrer para notebook libreria leer graficas graficar funciones documentacion datos data analisis pandas datetime dataframe count time-series

recorrer - Contando la frecuencia de valores por fecha usando pandas



recorrer data frame pandas (3)

Convierta su columna de TimeStamp en número de semana y luego agrupe por número de semana y value_count la variable categórica así:

df.groupby(''week_num'').Category.value_counts()

Donde asumí que se creó una nueva columna week_num partir de la columna TimeStamp.

Supongamos que tengo siguientes series de tiempo:

Timestamp Category 2014-10-16 15:05:17 Facebook 2014-10-16 14:56:37 Vimeo 2014-10-16 14:25:16 Facebook 2014-10-16 14:15:32 Facebook 2014-10-16 13:41:01 Facebook 2014-10-16 12:50:30 Orkut 2014-10-16 12:28:54 Facebook 2014-10-16 12:26:56 Facebook 2014-10-16 12:25:12 Facebook ... 2014-10-08 15:52:49 Youtube 2014-10-08 15:04:50 Youtube 2014-10-08 15:03:48 Vimeo 2014-10-08 15:02:27 Youtube 2014-10-08 15:01:56 DailyMotion 2014-10-08 13:27:28 Facebook 2014-10-08 13:01:08 Vimeo 2014-10-08 12:52:06 Facebook 2014-10-08 12:43:27 Facebook Name: summary, Length: 600

Me gustaría hacer un recuento de cada categoría (Valor / Factor Único en las Series de Tiempo) por semana y año.

Example: Week/Year Category Count 1/2014 Facebook 12 1/2014 Google 5 1/2014 Youtube 2 ... 2/2014 Facebook 2 2/2014 Google 5 2/2014 Youtube 20 ...

¿Cómo se puede lograr esto utilizando pandas de Python?


Para ser un poco más claro, no necesita crear una nueva columna llamada ''week_num'' primero.

df.groupby(by=lambda x: "%d/%d" % (x.week(), x.year())).Category.value_counts()

La función llamará automáticamente a cada objeto de marca de tiempo del índice para convertirlos en semana y año, y luego agruparlos por semana y año.


Podría ser más fácil convertir su Serie en un Marco de Datos y usar la funcionalidad groupby Pandas (si ya tiene un Marco de Datos, salte directamente a agregar otra columna a continuación).

Si su Serie se llama s , entonces conviértala en un DataFrame así:

>>> df = pd.DataFrame({''Timestamp'': s.index, ''Category'': s.values}) >>> df Category Timestamp 0 Facebook 2014-10-16 15:05:17 1 Vimeo 2014-10-16 14:56:37 2 Facebook 2014-10-16 14:25:16 ...

Ahora agregue otra columna para la semana y el año (una forma es usar apply y generar una cadena de los números de la semana / año):

>>> df[''Week/Year''] = df[''Timestamp''].apply(lambda x: "%d/%d" % (x.week, x.year)) >>> df Timestamp Category Week/Year 0 2014-10-16 15:05:17 Facebook 42/2014 1 2014-10-16 14:56:37 Vimeo 42/2014 2 2014-10-16 14:25:16 Facebook 42/2014 ...

Finalmente, agrupe por ''Week/Year'' y ''Category'' y agregue con size() para obtener los conteos. Para los datos en su pregunta esto produce lo siguiente:

>>> df.groupby([''Week/Year'', ''Category'']).size() Week/Year Category 41/2014 DailyMotion 1 Facebook 3 Vimeo 2 Youtube 3 42/2014 Facebook 7 Orkut 1 Vimeo 1