You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算小时这类周期性循环数据的平均值?

环形时间数据的平均计算方案

针对小时这类环形(0-23)时间数据,直接计算算术平均会因边界(23与0相邻)问题出现偏差,成熟的解决方案是使用圆形统计量,核心思路是把时间映射到单位圆上的点,通过向量平均得到真实平均时间,具体步骤:

  • 将小时转换为弧度(1小时对应π/12弧度,即2π/24)
  • 计算每个时间点的正弦、余弦值
  • 对每个用户的正弦、余弦值分别求均值
  • 通过反正切函数计算平均角度,再转换回小时

Python实现代码

import pandas as pd
import numpy as np

# 构造数据集
df = pd.DataFrame({"User":[0,0,1,1,1],"Hour Visited":[23,1,23,0,1]})

# 定义环形时间均值计算函数
def circular_mean(hours):
    # 小时转弧度
    radians = hours * (2 * np.pi / 24)
    # 计算正弦、余弦的平均值
    mean_cos = np.mean(np.cos(radians))
    mean_sin = np.mean(np.sin(radians))
    # 计算平均角度
    mean_radian = np.arctan2(mean_sin, mean_cos)
    # 弧度转回小时,处理负角度情况
    mean_hour = (mean_radian * (24 / (2 * np.pi))) % 24
    return mean_hour

# 按用户分组计算环形均值
result = df.groupby("User")["Hour Visited"].apply(circular_mean).reset_index()
print(result)

输出结果

User  Hour Visited
0     0           0.0
1     1           0.0

该结果符合预期:用户0的23点和1点真实平均为0点,用户1的23、0、1点真实平均也为0点。

内容的提问来源于stack exchange,提问作者FromTheAshes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:35:18