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

Pandas按cust_id与日期排序计算bought列0到1的转化耗时实现

Pandas 实现客户购买转化耗时统计方案

实现步骤

  • 首先将日期列转换为datetime格式,避免字符串排序和时间计算出错
  • 按cust_id和date升序排序,保证每个客户的记录按时间顺序排列
  • 按客户分组,匹配每个客户的首次购买日期(即bought第一次为1的日期)
  • 过滤出所有bought=0的记录,计算每条记录到首次购买日期的月份差,即可得到转化耗时
  • 过滤掉从未产生购买行为的客户记录

完整可运行代码

import pandas as pd
import numpy as np

# 构造示例数据
data = {
    "cust_id": [1000, 1000, 1000, 1000, 1000, 1001, 1001, 1002, 1002],
    "date": ["2019-01-01", "2019-02-01", "2019-03-01", "2019-04-01", "2019-05-01", 
             "2019-01-01", "2019-02-01", "2019-01-01", "2019-02-01"],
    "bought": [0, 0, 0, 1, 1, 0, 1, 0, 0]
}
df = pd.DataFrame(data)

# 1. 日期类型转换 + 排序
df["date"] = pd.to_datetime(df["date"])
df = df.sort_values(by=["cust_id", "date"], ignore_index=True)

# 2. 匹配每个客户的首次购买日期
df["first_buy_date"] = df.groupby("cust_id")["bought"].transform(
    lambda x: df.loc[x.index, "date"][x == 1].min() if x.eq(1).any() else pd.NaT
)

# 3. 计算转化耗时,过滤无购买行为的记录
res_df = df[df["bought"] == 0].copy()
# 按自然月份差计算,如需按记录行间隔计算可以替换为分组内行号差
res_df["time"] = ((res_df["first_buy_date"] - res_df["date"]) / np.timedelta64(1, "M")).round().astype("Int64") + 1
res_df = res_df[["cust_id", "time"]].dropna().reset_index(drop=True)

print(res_df)

输出说明

上述代码运行后输出结果如下,符合需求核心逻辑:

cust_id  time
0     1000     4
1     1000     3
2     1000     2
3     1001     2

如果需要和你给出的样例输出完全匹配,可以将时间计算逻辑替换为分组内的行号差,按需调整差值计算规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:09:03