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

为百万级用户数据集df生成符合时序与季节规则的registration_date列

生成符合增长趋势与季节因素的注册日期列

实现思路

  1. 先明确目标时间区间内的所有月份,按规则计算每个月应分配的用户数量(满足逐月1%-10%增长,每年12月环比下降10%-15%)
  2. 为每个月份生成对应数量的随机日期
  3. 将所有日期打乱后分配给数据集的registration_date列,确保每个用户对应唯一注册日期

代码实现

import pandas as pd
import numpy as np
from datetime import datetime

# 总用户数取现有数据集的记录量
total_users = df.shape[0]

# 1. 生成目标时间范围内的所有月份列表
date_range = pd.date_range(start='2021-01-01', end='2023-02-28', freq='MS')
months = [date.strftime('%Y-%m') for date in date_range]

# 2. 计算每个月的用户数量
monthly_counts = []
# 初始化首月用户数,按总用户数平均分配后调整,确保最终总和匹配
initial_count = total_users // len(months)
current_count = initial_count

for month in months:
    year, mon = map(int, month.split('-'))
    if mon == 12:
        # 12月环比下降10%-15%
        drop_rate = np.random.uniform(0.1, 0.15)
        next_count = int(current_count * (1 - drop_rate))
    else:
        # 其他月份环比增长1%-10%
        growth_rate = np.random.uniform(0.01, 0.1)
        next_count = int(current_count * (1 + growth_rate))
    
    monthly_counts.append(current_count)
    current_count = next_count

# 调整最后一个月的数量,确保总和等于总用户数
monthly_counts[-1] += total_users - sum(monthly_counts)

# 3. 生成每个月的随机日期
registration_dates = []
for i, month in enumerate(months):
    year, mon = map(int, month.split('-'))
    # 获取当月的第一天和最后一天
    start_date = datetime(year, mon, 1)
    end_date = datetime(year, mon+1, 1) - pd.Timedelta(days=1) if mon !=12 else datetime(year, 12, 31)
    # 生成对应数量的随机日期
    dates = pd.date_range(start=start_date, end=end_date, periods=monthly_counts[i])
    registration_dates.extend(dates)

# 4. 打乱日期并分配给df
np.random.shuffle(registration_dates)
df['registration_date'] = registration_dates

关键细节说明

  • 用户数校准:最后调整最后一个月的用户数,保证总数量和数据集记录数完全匹配
  • 日期随机性:用pd.date_range的periods参数生成均匀分布的随机日期,若需要更离散的随机分布,可替换为np.random.choice生成日期数组
  • 季节因素处理:单独判断12月并应用下降比例,其他月份统一执行增长逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:17:27