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

Pandas对比前序日期新增列 识别用户近3个月复购记录

Pandas交易数据3个月复购标记实现方案

核心规则

新增repeat_purchase_P3M列的计算逻辑:

  • 按用户code分组独立计算
  • 对每笔交易,检索该用户在当前交易日期往前3个月内的历史交易
  • 若存在符合条件的记录,填入距离当前交易最近的一笔前序交易日期;无符合条件记录则填入no

实现代码

import pandas as pd

# 1. 读取数据并转换日期格式
df = pd.read_csv("transaction.csv")
df["transaction_datetime"] = pd.to_datetime(df["transaction_datetime"])

# 2. 按用户分组,按时间排序后取每笔交易的最近一笔前序交易时间
df["prev_trade_date"] = df.groupby("code")["transaction_datetime"].shift(1)

# 3. 逐行判断前序交易是否在3个月窗口内
def match_p3m_rule(row):
    # 无前序交易直接返回no
    if pd.isna(row["prev_trade_date"]):
        return "no"
    # 计算当前交易往前推3个月的时间节点,用自然月偏移避免天数计算误差
    window_start = row["transaction_datetime"] - pd.DateOffset(months=3)
    if row["prev_trade_date"] >= window_start:
        return row["prev_trade_date"].strftime("%Y-%m-%d")
    return "no"

df["repeat_purchase_P3M"] = df.apply(match_p3m_rule, axis=1)

# 4. 格式对齐样例输出
df["transaction_datetime"] = df["transaction_datetime"].dt.strftime("%Y-%m-%d")
df = df.drop(columns=["prev_trade_date"])

# 导出结果
df.to_csv("transaction_with_repeat_flag.csv", index=False)

结果验证

运行代码后得到的输出和预期完全一致:

code,transaction_datetime,repeat_purchase_P3M
1,2021-12-01,no
1,2022-01-24,2021-12-01
1,2022-05-29,no
2,2021-11-20,no
2,2022-04-12,no
2,2022-06-02,2022-04-12
3,2021-04-23,no
3,2022-04-22,no

注:代码中使用pd.DateOffset(months=3)计算3个月窗口,是按自然月规则偏移,比固定90天的计算方式更符合通用业务的"近3个月"定义,可避免大小月、闰年带来的计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:18:26