如何分组非唯一的时间日期索引和列

时间:2013-07-03 13:11:38

标签: python pandas

刚从熊猫开始。我有一个DataFrame,其时间日期索引有多列(解析日志文件的数据)。我已经能够将DataFrame索引转换为句点索引(每月)。其中一列包含与日志文件中的事件关联的用户名。我想概述每个用户每月的出现次数(即DataFrame中的行数)。索引具有非唯一值,因此我可以使用

对此进行分组

grp = DF_monthly.groupby(level=0)

但是,我似乎无法在用户列上添加额外的分组。我怎样才能做到这一点?

1 个答案:

答案 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

所以除非你有其他理由这样做,否则没有必要先按月分组。如果是这样,您也可以在每月df上应用最后一个groupby。

lambda函数将索引中的每个时间戳转换为“Year-Month”字符串,并对该字符串执行groupby。