我有一個數據集取自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非常真實!然而(儘管我意識到這不是原問題的一部分),如果我想添加另一列(例如按事件類型和主機名,按時間戳記計數事件),這種方法仍然有效嗎? –