python - 如何按时间值对 CSV 中的数据帧进行分组,以便我可以计算每小时的频率?
问题描述
这是我的数据集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
对象,从而可以访问许多附加功能。在这种情况下,您可以地板到最近的时间。
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
...
推荐阅读
- html - 媒体查询与显示选项一起使用
- google-cloud-platform - 使用列标题从 Cloud SQL 导出到 CSV
- python - Python中的条件数据框查询
- javascript - 数组不显示值
- python - 如何从日期时间对象中获取小时和分钟
- javascript - 在 ng-repeat angularjs 中显示数组对象
- oracle - 如何从数据库表 (ORACLE) 中获取“IF STATEMENT”条件?
- cuda - 将变量传递给 CUDA 内核
- c++ - 需要忽略日期/序列号但匹配字符串其余部分的正则表达式
- c# - 在 foreach 中使用 Session 变量