2015-01-07 3 views
9

Давайте предположим, что я в следующий раз Серия:Подсчет частоты значений по дате с использованием панд

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 

Я хотел бы сделать подсчет каждой категории (Unique Value/Factor в серии Time) в неделю и год ,

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 
... 

Как это можно достичь с помощью Pandon pandas?

ответ

11

Возможно, проще всего превратить вашу серию в DataFrame и использовать функциональность Pandas 'groupby (если у вас уже есть DataFrame, то пропустите прямо, чтобы добавить еще один столбец ниже).

Если серия называется s, а затем превратить его в DataFrame так:

>>> 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 
... 

Теперь добавьте еще один столбец, в течение недели и года (один из способов заключается в использовании apply и создать строку недели/год число):

>>> 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 
... 

Наконец, группа по 'Week/Year' и 'Category' и совокупности с size(), чтобы получить отсчеты. Для данных в вашем вопросе это производит следующее:

>>> 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 
1

Преобразование столбца TimeStamp в номер недели затем GroupBy, что номер недели и value_count категорических переменном следующим образом:

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

Где я предположил, что новый столбец week_num был создан из колонны TimeStamp.

+0

У меня есть аналогичная задача, однако я хочу группировать по минутам, как это можно достичь? – IG2013

+1

Наличие DataFrame 'df' с датой-столбцом (тип datetime)' date'you может использовать 'df.groupby (df [" date "]. Dt.minute) .size()'. Это говорит о том, сколько строк падает каждую минуту. – feinmann

2

Чтобы быть немного более ясным, что вам не нужно, чтобы создать новый столбец под названием «WEEK_NUM» первым.

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

Функция по автоматически позвонит на каждой временной метки объекта индекса, чтобы преобразовать их в неделю и год, а затем группы на неделю и год.

Смежные вопросы