Pandas按日期统计唯一Host数求助:输出不符合预期
问题分析
你当前代码输出全为1的核心原因是按精确到秒的完整timestamp分组,每一行的timestamp都唯一,导致每个分组的唯一host数必然是1。另外,手动减去7小时的处理不严谨,无法适配日志中存在的-0800偏移量。
修正步骤
- 保留pandas对带时区时间戳的原生解析能力,无需手动加减小时
- 从时间戳中提取日期维度(需处理跨天情况,建议转换为UTC后取日期)
- 按日期分组统计唯一host数量
修正后代码
import pandas as pd # 复制目标列到temp表 temp = Mainpanda[['timestamp', 'host']].copy() # 正确解析带时区偏移的时间戳 temp['timestamp'] = pd.to_datetime(temp['timestamp'], format='%d/%b/%Y:%H:%M:%S %z') # 转换为UTC时间并提取日期(自动处理跨天调整) temp['date'] = temp['timestamp'].dt.tz_convert('UTC').dt.date # 按日期分组,统计每日唯一host数 daily_unique_hosts = temp.groupby('date')['host'].nunique().reset_index() # 按日期排序 daily_unique_hosts = daily_unique_hosts.sort_values(by='date') # 转换为目标列表格式 result = daily_unique_hosts['host'].tolist() print(result)
说明
- 用
dt.tz_convert('UTC')将带时区的时间统一转换为UTC,自动处理跨天场景(比如-0700时区的22点会转换为UTC次日5点,日期自动调整为次日) - 用
dt.date提取日期作为分组依据,确保同一日期的所有记录被归为一组 - 针对你的示例日志,运行后会输出
[1, 1, 1, 2, 1, 1],按日期排序后与你的期望一致(若需调整排序顺序,可修改sort_values参数)
内容的提问来源于stack exchange,提问作者Jason Wang
相关产品推荐
相关产品推荐

