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

Python时间序列按月份汇总计算signal_value大于5的占比方法

实现步骤与代码
  • 前置依赖:确保已安装pandas库
  • 第一步:转换时间戳格式
    先将DataFrame的timestamp字段转换为datetime类型,避免后续时间运算报错:
import pandas as pd
df['timestamp'] = pd.to_datetime(df['timestamp'])
  • 第二步:按月分组计算占比(适配等间隔采样场景,绝大多数时序场景适用)
    等间隔采样的场景下,行数占比完全等于时间占比,直接对布尔值求均值即可得到目标占比:
monthly_gt5_ratio = df.groupby(df['timestamp'].dt.to_period('M'))['signal_value'].apply(
    lambda x: (x > 5).mean()
).reset_index(name='monthly_gt5_ratio')
print(monthly_gt5_ratio)

输出结果包含两列:timestamp列格式为YYYY-MM对应月份,monthly_gt5_ratio为对应月份内信号值大于5的时间占比,取值范围为0-1,需要百分比格式可自行乘以100。

  • 补充:非等间隔采样场景加权计算
    如果你的时间序列采样间隔不固定,需要按时间差加权计算真实时间占比:
# 先按时间戳升序排序
df = df.sort_values('timestamp', ignore_index=True)
# 计算每条记录对应的有效时间长度
df['duration'] = df['timestamp'].shift(-1) - df['timestamp']
df['duration'] = df['duration'].ffill() # 最后一条记录用前序间隔填充,可按业务需求调整

# 加权计算占比
monthly_gt5_ratio = df.groupby(df['timestamp'].dt.to_period('M')).apply(
    lambda group: group[group['signal_value'] > 5]['duration'].sum() / group['duration'].sum()
).reset_index(name='monthly_gt5_weighted_ratio')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:39:01