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