熊猫DataFrame.groupby包括索引

ƘɌỈSƬƠƑ

我有一个Windows事件日志中的数据集。TimeGenerated列设置为索引。我想要一个汇总视图,以EventType(info / warn / err)和索引值的形式显示事件的数量我可以resample()用来设置日期时间分辨率(日期,工作日等)。

这是我的DataFrame:

数据框

log.info()

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 80372 entries, 2015-08-31 12:15:23 to 2015-05-11 04:08:07
Data columns (total 4 columns):
EventID          80372 non-null int64
SourceName       80372 non-null object
EventType        76878 non-null object
EventCategory    80372 non-null int64
dtypes: int64(2), object(2)
memory usage: 3.1+ MB

我当然可以按EventType分组,但这会降低索引:

log[['EventID', 'EventType']].groupby('EventType').count('EventID')

分组

我必须在调用中指定我现有的索引groupby(),但是如何引用该索引呢?还是我必须reset_index()groupby()通话执行“ a 还是我只是简单地解决了所有这些错误,并且我显然是熊猫新手,所以很痛苦吗?;-)

版本信息:

  • 的Python 3.4.2
  • 熊猫0.16.2
  • numpy的1.9.2

更新

为了进一步阐明,我想要实现的是:

  • EventID的计数(事件数)
  • 通过EventType(在轴1上)
  • 按时间戳记(在轴0上)

请注意,时间戳记不是唯一的(在原始DF中),因为可以同时发生多个事件。

实现目标的一种方法是:

temp = log.reset_index()
temp.groupby(['TimeGenerated','EventType']).count('EventID'['EventID'].unstack().fillna(0)

在这种情况下,我的输出是:

分组2

然后,我可以进一步对计数进行重新采样,例如:

temp.resample('MS', how='sum')

这可行,但是我不知道是否必须执行Areset_index()才能实现此分组。我能以更好的方式(更好地阅读:更有效的方式)做到吗?

ƘɌỈSƬƠƑ

我所缺少的是,您可以groupby()在索引的一个或多个级别上执行

test = log.set_index('EventType', append=True)
test = test.groupby(level=[0,1])['EventID'].count('EventID')
test.unstack().fillna(0)

另外,Brian Pendleton的建议也起作用:

pd.get_dummies(log.EventType)

与最后一种方法的不同之处在于,如果您需要在列轴中添加其他级别(例如,按主机名),则该方法也无法正常工作。但这当然不是原始问题的一部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章