如何结合Pandas Groupby与Resample分析函数调用时长数据?
实现步骤与代码示例
首先,先把duration列从timedelta类型转为数值(比如总秒数),方便后续聚合计算:
# 将timedelta转为总秒数,便于统计 df['duration_sec'] = df['duration'].dt.total_seconds()
核心统计实现(两种方法二选一)
方法1:用pd.Grouper同时按时间窗口和函数分组
直接指定5分钟时间窗口,和function一起作为分组依据,一次性计算所需统计量:
# 按5分钟时段 + 函数名称分组,计算时长的最大、最小、平均值 stats_result = df.groupby([ pd.Grouper(freq='5min'), # 基于DatetimeIndex的5分钟分段 'function' ])['duration_sec'].agg(['max', 'min', 'mean']).reset_index()
方法2:先按函数分组,再对每组做时间重采样
适合需要对单个函数单独分析的场景,逻辑更直观:
# 先按函数分组,每个函数组内按5分钟重采样统计 stats_result = df.groupby('function')['duration_sec'].resample('5min').agg(['max', 'min', 'mean']).reset_index()
定位缓慢时段
统计结果出来后,可通过筛选条件定位异常时段:
# 示例:筛选平均调用时长超过10秒的记录 slow_cases = stats_result[stats_result['mean'] > 10] # 或者筛选最大值超过阈值的记录 slow_spikes = stats_result[stats_result['max'] > 30]
关键说明
freq='5min':指定时间窗口为5分钟,Pandas会自动按Timestamp的时间戳划分连续的5分钟区间(比如00:00-00:05、00:05-00:10等)agg(['max', 'min', 'mean']):批量聚合多个统计指标,比单独调用max()/min()更高效reset_index():将分组后的多级索引转为普通列,方便后续查看、导出或可视化- 如果需要保留无调用记录的5分钟窗口(填充0或NaN),可在
resample或Grouper中添加dropna=False
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

