簡體   English   中英

如何按時間值將CSV中的數據幀分組,以便可以計算每小時的頻率?

[英]How do I group dataframe from CSV by Time Value, So that I can count frequency for each hour?

這是我的數據集dataset_for_this_Question

我想根據“時間”和“類型”對數據集進行分組,這樣我就可以每小時獲取一次“名稱”的頻率。 [每小時多少種類型及其名稱]。 我的第一個要求是根據“時間”-每小時對數據集進行分組。

我在Python中使用Pandas。

您可以groupby你的第一個13個字符Time列和Type ,然后只需使用value_counts所有三個,或組,並使用.size

df.groupby([df.Time.str[0:13], 'Type']).Name.value_counts()
# or
df.groupby([df.Time.str[0:13], 'Type', 'Name']).size()

輸出:

Time           Type                      Name                               
2018-04-07 15  COMMUNICATIONS ALARM      Device Management IP is Unreachable    141
2018-04-07 16  COMMUNICATIONS ALARM      Device Management IP is Unreachable     64
2018-04-07 17  COMMUNICATIONS ALARM      Device Management IP is Unreachable      6
...
2018-04-09 14  COMMUNICATIONS ALARM      Device Management IP is Unreachable      8
2018-04-09 15  COMMUNICATIONS ALARM      Device Management IP is Unreachable     11
2018-04-09 16  COMMUNICATIONS ALARM      Device Management IP is Unreachable      5
2018-04-09 17  QUALITY_OF_SERVICE_ALARM  Temperature Absolute High               64
                                         Memory Absolute High                     1

給定您的數據格式,按字符串字符進行切片是完全可以的,但可能要視情況而定。 通常,您可以將“ Time列轉換為datetime Time對象,從而可以訪問許多其他功能。 在這種情況下,您可以下限到最近的小時。

df['Time'] = pd.to_datetime(df.Time)
df.groupby([df.Time.dt.floor('1H'), 'Type', 'Name']).size()

將產生:

Time                 Type                      Name                               
2018-04-07 15:00:00  COMMUNICATIONS ALARM      Device Management IP is Unreachable    141
2018-04-07 16:00:00  COMMUNICATIONS ALARM      Device Management IP is Unreachable     64
2018-04-07 17:00:00  COMMUNICATIONS ALARM      Device Management IP is Unreachable      6
2018-04-07 18:00:00  COMMUNICATIONS ALARM      Device Management IP is Unreachable      7
...

為每個小時創建時間格式,然后為每個小時收集數據,然后每兩個小時添加一次數據

dates = pd.date_range(start='2018-04-09', end='2018-05-17', freq='H')
dates

然后,您將獲得以下輸出:

DatetimeIndex(['2018-04-09 00:00:00', '2018-04-09 01:00:00',
           '2018-04-09 02:00:00', '2018-04-09 03:00:00',
           '2018-04-09 04:00:00', '2018-04-09 05:00:00',
           '2018-04-09 06:00:00', '2018-04-09 07:00:00',
           '2018-04-09 08:00:00', '2018-04-09 09:00:00',
           ...
           '2018-05-16 15:00:00', '2018-05-16 16:00:00',
           '2018-05-16 17:00:00', '2018-05-16 18:00:00',
           '2018-05-16 19:00:00', '2018-05-16 20:00:00',
           '2018-05-16 21:00:00', '2018-05-16 22:00:00',
           '2018-05-16 23:00:00', '2018-05-17 00:00:00'],
          dtype='datetime64[ns]', length=913, freq='H')

df_new = pd.DataFrame()   

此數據幀用於從主數據幀[df]收集每小時的數據

for x in range(0, len(dates) - 2, 2):
    start_date = str(dates[x])[:13]
    end_date = str(dates[x+1])[:13]
    print(start_date, end_date)


df_temp = df[start_date:end_date]   
# Each hour of data collected to new dataframe. 

在數據框中獲取數據后,我們可以執行很多操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM