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

如何基于created_at_date创建cycle grouping列?按14天周期循环分类

实现思路与代码示例

SQL 实现方案

核心是计算每个日期和起始日期的天数差,对28取模(28天为一个完整循环:14天First Cycle + 14天Second Cycle),再根据模值判断周期,最后拼接日期与周期名称。

以MySQL为例,假设created_at_date是字符串格式的日期:

SELECT
    created_at_date,
    CONCAT(
        created_at_date,
        CASE
            WHEN DATEDIFF(STR_TO_DATE(created_at_date, '%m/%d/%Y'), STR_TO_DATE('09/11/2022', '%m/%d/%Y')) % 28 < 14 THEN 'First Cycle'
            ELSE 'Second Cycle'
        END
    ) AS cycle_grouping
FROM your_table;

其他SQL方言可调整日期函数:

  • PostgreSQL:用DATE_PART('day', created_at_date - '2022-09-11'::DATE)计算天数差
  • BigQuery:用DATE_DIFF(created_at_date, DATE('2022-09-11'), DAY)计算天数差

Python Pandas 实现方案

先将日期列转为datetime类型,计算天数差后通过模运算判断周期,最后拼接结果。

import pandas as pd

# 加载数据(示例)
df = pd.read_csv('your_data.csv')

# 转换日期格式
df['created_at_date'] = pd.to_datetime(df['created_at_date'], format='%m/%d/%Y')
start_date = pd.to_datetime('2022-09-11')

# 计算与起始日期的天数差
df['days_diff'] = (df['created_at_date'] - start_date).dt.days

# 生成cycle_grouping列
df['cycle_grouping'] = df.apply(
    lambda row: f"{row['created_at_date'].strftime('%m/%d/%Y')}First Cycle" 
    if row['days_diff'] % 28 < 14 
    else f"{row['created_at_date'].strftime('%m/%d/%Y')}Second Cycle",
    axis=1
)

# 清理中间列(可选)
df = df.drop('days_diff', axis=1)

核心逻辑总结

无论使用哪种工具,核心步骤一致:

  • 统一日期格式,确保可计算日期差
  • 计算目标日期与2022-09-11的天数间隔
  • 对天数间隔取28的模,判断所属周期段:模值小于14为First Cycle,否则为Second Cycle
  • 将原日期字符串与周期名称拼接,得到目标列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:05:27