刚从熊猫开始。我有一个带有时间日期索引的 DataFrame 多列(来自解析日志文件的数据)。我已经能够将 DataFrame 索引转换为周期索引(每月)。其中一列包含与日志文件中的事件关联的用户名。我想大致了解每个用户每月出现的次数(即 DataFrame 中的行)。该索引具有非唯一值,因此我可以通过使用对其进行分组
grp = DF_monthly.groupby(level=0)
但是,我似乎无法在用户列上添加额外的分组。我怎样才能做到这一点?
假设您的原始日志如下所示:
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 函数将每个时间戳从索引转换为“年月”字符串,并对该字符串执行分组。