![](/img/trans.png)
[英]How do I count frequency of each categorical variable in a column in pyspark dataframe for multiple columns?
[英]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.