刚从熊猫开始。我有一个DataFrame,其时间日期索引有多列(解析日志文件的数据)。我已经能够将DataFrame索引转换为句点索引(每月)。其中一列包含与日志文件中的事件关联的用户名。我想概述每个用户每月的出现次数(即DataFrame中的行数)。索引具有非唯一值,因此我可以使用
对此进行分组 grp = DF_monthly.groupby(level=0)
但是,我似乎无法在用户列上添加额外的分组。我怎样才能做到这一点?
答案 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。