上下文:WiFi DHCP 租约记录在系统日志中。
DHCP 租用期限为 24 小时,一条记录代表一次成功的 WiFi“会话”。有些设备(例如手机)每天会启动多个会话,因此我们只需每 24 小时计算唯一的 Mac 地址。但我们想知道第一次连接的时间戳。最后,我们需要能够按小时和天进行求和。
TL;DR:需要显示按小时细分的每日唯一 MAC 地址。不是按小时唯一,而是按天……然后按小时细分并求和。
示例数据框:
branch timestamp mac
0 branch_a 2020-09-01 00:00:00 48:c7:96:1d:91:af
1 branch_a 2020-09-01 00:08:00 48:c7:96:1d:91:bx
2 branch_b 2020-09-01 00:36:07 48:c7:96:1d:80:ff
3 branch_b 2020-09-01 00:41:24 48:c7:96:1d:86:ff
4 branch_c 2020-09-01 00:44:33 48:c7:96:1d:76:bv
脚步:
按分支分组
每天首次出现或唯一的 MAC 地址
按小时计算 mac 地址总和
这显示了相同的 mac。
branch_daily = wifi.groupby(['branch','month', 'timestamp'])['mac'].first()
预期结果:
branch timestamp mac
0 branch_a 2020-09-01 00:00:00 5
1 branch_a 2020-09-01 00:01:00 10
2 branch_a 2020-09-01 00:02:00 3
3 branch_a 2020-09-01 00:03:00 4
4 branch_a 2020-09-01 00:04:00 11
其中 mac 是按小时计算的总和。
wifi['timestamp'] = pd.to_datetime(wifi['timestamp'], format='%b %d %Y %H:%M:%S')
wifi['month'] = wifi['timestamp'].dt.month
wifi['day'] = wifi['timestamp'].dt.day
wifi['hour'] = wifi['timestamp'].dt.hour
uniq_per_day = wifi.drop_duplicates(subset=['day','mac'], keep='first')
# Hourly
uniq_per_day.groupby(['branch','month','day','hour']).agg({'mac':'count'})
# Daily
uniq_per_day.groupby(['branch','month','day']).agg({'mac':'count'})
#...etc.
泛舟湖上清波郎朗
相关分类