首页 > 解决方案 > 如何按时间值对 CSV 中的数据帧进行分组,以便我可以计算每小时的频率?

问题描述

这是我的数据集dataset_for_this_Question

我想根据“时间”和“类型”对数据集进行分组,以便每小时获得“名称”的频率。[每小时有多少种类型,它们的名称是什么]。我的第一个要求是根据“时间”(每小时)对数据集进行分组。

我在 Python 中使用 Pandas。

标签: pythonpandasdata-sciencepandas-groupby

解决方案


您可以将列groupby的前 13 个字符TimeType,然后只使用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对象,从而可以访问许多附加功能。在这种情况下,您可以地板到最近的时间。

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
...

推荐阅读