我有一个数据集取自Windows Eventlog。 TimeGenerated
列被设置为索引。我想得到一个聚合视图,显示事件的数量,由EventType
(info/warn/err)和索引值组成。我可以使用resample()
设置日期时间分辨率(日,工作日等)。熊猫DataFrame.groupby包括索引
这里是我的数据框:
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
我可以通过事件类型课程群,但这种下降我的索引:
log[['EventID', 'EventType']].groupby('EventType').count('EventID')
我会在通话中指定我现有的索引到groupby()
,但我怎样才能引用索引?或者我必须在拨打groupby()
之前执行reset_index()
?或者我只是简单地谈论这一切都是错误的,而且我是熊猫新手呢,这显然很明显吗? ;-)
版本信息:
- 的Python 3.4.2
- 大熊猫0.16.2
- numpy的1.9.2
更新
为了进一步澄清,什么我想实现的是:
- 的EventIDs的计数(事件的数量)
- 通过的EventType(在轴1)
- 通过时间戳(在轴线0)
注意,时间戳并不唯一(在原始的DF),因为多个事件可以同时发生。我已经能够达到我想要的东西
的一种方式,是这样做的:
temp = log.reset_index()
temp.groupby(['TimeGenerated','EventType']).count('EventID'['EventID'].unstack().fillna(0)
在这种情况下,我的输出是:
,然后让我进一步重新计数,例如:
temp.resample('MS', how='sum')
这工作,但我不知道是否有执行reset_index()
要实现这个分组。我能否以更好的方式做到这一点(阅读:更有效率)?
你是什么意思'按指数值'?每个事件都是一个时间戳,所以你的原始DF已经是索引值。例如,您是否想在DF中添加一列,例如,然后将其包含在您的分组中? – Alexander
您可以使用'pd.get_dummies(df.eventtype)'创建假人。然后只是按照您添加的新列添加日期和总和。 –
@BrianPendleton非常真实!然而(尽管我意识到这不是原问题的一部分),如果我想添加另一列(例如按事件类型和主机名,按时间戳记计数事件),这种方法仍然有效吗? –