2013-07-03 2 views
0

Только начиная с Панды. У меня есть DataFrame с индексом timedate количество столбцов (данные от разбора файла журнала). Я смог преобразовать индекс DataFrame в индекс периода (ежемесячно). Один из столбцов содержит имя пользователя, связанное с событием в файле журнала. Я хотел бы получить обзор количества вхождений (т. Е. Строк в DataFrame) в месяц для каждого пользователя. Индекс имеет неуникальное значение, так что я был в состоянии группы с помощью этогоКак сгруппировать неповторимый индекс времени и столбец

grp = DF_monthly.groupby(level=0)

Однако, я, кажется, не быть в состоянии добавить, что дополнительную группировку на колонке пользователя. Как я могу это сделать?

ответ

2

Произнесите сырье журнал выглядит следующим образом:

import pandas as pd 
from StringIO import StringIO 

infile = StringIO("""datetime,user,event 
2013-01-01 11:15:23,A,error 
2013-01-02 11:15:23,C,warning 
2013-01-03 11:15:23,C,message 
2013-02-01 11:15:23,A,error 
2013-02-02 11:15:23,B,warning 
2013-02-03 11:15:23,A,message""") 

df = pd.read_csv(infile, parse_dates=True, index_col='datetime') 

        user event 
datetime       
2013-01-01 11:15:23 A error 
2013-01-02 11:15:23 C warning 
2013-01-03 11:15:23 C message 
2013-02-01 11:15:23 A error 
2013-02-02 11:15:23 B warning 
2013-02-03 11:15:23 A message 

Тогда вы можете получить количество для каждого пользователя в месяц с:

df.groupby([lambda x: x.strftime('%Y-%b'), 'user']).count()['event'] 

      user 
2013-Feb A  2 
      B  1 
2013-Jan A  1 
      C  2 

Таким образом, ее не необходимым для GroupBy месяца первого, если у вас нет других причины для этого. Если это так, вы также можете применить последнюю группу на ежемесячном df.

Функция лямбда преобразует каждую временную метку из индекса в строку «Год-месяц» и выполняет группу по этой строке.

+0

Спасибо. Теперь я должен был бы преобразовать это в кросс-таблицу, чтобы я мог сделать сюжет. – GertVdE

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