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

pandas生成随机时间戳时如何为9:00-19:00区间分配更高权重

实现方案

核心思路是将一天的时间划分为高峰时段(9:00-19:00)和非高峰时段(其余时间),通过加权随机优先选择高峰区间生成时分秒,你可以直接调整权重参数控制两个时段的生成概率。

基础版本(两档权重,区间内均匀随机)

import pandas as pd
import numpy as np

# 可自定义配置参数
PEAK_PROB = 0.8  # 高峰时段生成概率,可按需调整为0-1之间的数值
PEAK_START_SEC = 9 * 3600  # 9点对应的当日秒数
PEAK_END_SEC = 19 * 3600  # 19点对应的当日秒数
FULL_DAY_SEC = 24 * 3600

sample_count = len(d)
# 随机标记每条数据是否生成高峰时段时间
is_peak_sample = np.random.choice([True, False], size=sample_count, p=[PEAK_PROB, 1-PEAK_PROB])

# 分区间生成随机秒数
random_seconds = np.where(
    is_peak_sample,
    # 高峰时段:在9-19点范围内生成随机秒数
    np.random.randint(PEAK_START_SEC, PEAK_END_SEC, size=sample_count),
    # 非高峰时段:拼接0-9点、19-24点两个不连续区间生成随机秒数
    np.random.randint(0, FULL_DAY_SEC - (PEAK_END_SEC - PEAK_START_SEC), size=sample_count) 
    + np.where(
        np.random.randint(0, FULL_DAY_SEC - (PEAK_END_SEC - PEAK_START_SEC), size=sample_count) < PEAK_START_SEC,
        0,
        PEAK_END_SEC - PEAK_START_SEC
    )
)

# 生成最终完整日期时间列
d['full_datetime'] = pd.to_datetime(d['day']) + pd.to_timedelta(random_seconds, unit='s')

进阶版本(高峰时段钟形分布)

如果需要高峰时段的中间时间段(比如12-16点)概率更高,早晚边缘时段概率更低,可以用Beta分布生成更贴合真实人流的时间分布:

# 仅需要替换高峰时段的秒数生成逻辑即可
beta_val = np.random.beta(a=2, b=2, size=sample_count) # a、b参数越大,分布越集中在时段中间
random_seconds = np.where(
    is_peak_sample,
    PEAK_START_SEC + beta_val * (PEAK_END_SEC - PEAK_START_SEC),
    # 非高峰生成逻辑和基础版本一致
    np.random.randint(0, FULL_DAY_SEC - (PEAK_END_SEC - PEAK_START_SEC), size=sample_count) 
    + np.where(
        np.random.randint(0, FULL_DAY_SEC - (PEAK_END_SEC - PEAK_START_SEC), size=sample_count) < PEAK_START_SEC,
        0,
        PEAK_END_SEC - PEAK_START_SEC
    )
).astype(int)

参数调整说明

  • 调整PEAK_PROB的数值可以修改高峰时段的出现占比,比如设置为0.7就是70%的样本生成9-19点的时间
  • 调整np.random.beta的a和b参数可以修改高峰时段的分布形态,a=b>2时分布会更向中间集中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:02