0

刚从熊猫开始。我有一个带有时间日期索引的 DataFrame 多列(来自解析日志文件的数据)。我已经能够将 DataFrame 索引转换为周期索引(每月)。其中一列包含与日志文件中的事件关联的用户名。我想大致了解每个用户每月出现的次数(即 DataFrame 中的行)。该索引具有非唯一值,因此我可以通过使用对其进行分组

grp = DF_monthly.groupby(level=0)

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

4

1 回答 1

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 函数将每个时间戳从索引转换为“年月”字符串,并对该字符串执行分组。

于 2013-07-03T13:41:29.007 回答