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

如何在Pandas中按ID计算CV与对应Visit的日期间隔

解决方案

首先,我们需要先将日期列转换为可计算的datetime类型,再按ID分组,为每个CV匹配最近的、发生在它之前的Visit日期,最后计算天数差。以下是完整实现步骤:

步骤1:转换日期格式

先把date列从字符串转为Pandas的datetime类型,这样才能进行日期运算:

import pandas as pd
data1 = {'ID': ['A2A', 'A2A', 'A2A', 'BB3', 'BB3', 'BB3', '5EE', '5EE'], 'Action': ['Visit', 'CV', 'CV', 'Visit', 'Visit', 'CV', 'Visit', 'CV'], 'date': ['2023/4/1', '2023/4/5', '2023/4/7', '2023/5/5', '2023/5/29', '2023/5/30', '2023/6/1', '2023/6/10']}
df = pd.DataFrame(data1)

# 转换日期列
df['date'] = pd.to_datetime(df['date'])

步骤2:为每个CV匹配对应Visit日期

按ID分组后,我们需要为每一行填充最近的前置Visit日期。这里可以通过临时标记Visit日期,再向前填充的方式实现:

# 临时列:仅保留Visit行的日期,CV行设为缺失值
df['visit_date'] = df.apply(lambda x: x['date'] if x['Action'] == 'Visit' else pd.NA, axis=1)

# 按ID分组后向前填充,让每个CV自动匹配最近的前置Visit日期
df['visit_date'] = df.groupby('ID')['visit_date'].ffill()

步骤3:计算CV与Visit的天数差

直接用CV日期减去对应Visit日期,提取天数数值,Visit行可设为缺失值(也可根据需求改为0):

# 计算天数差,仅CV行生成有效数值
df['CV_days_after_visit'] = df.apply(
    lambda x: (x['date'] - x['visit_date']).days if x['Action'] == 'CV' else pd.NA,
    axis=1
)

最终结果

运行后得到的DataFrame如下:

ID  Action       date visit_date  CV_days_after_visit
0  A2A  Visit 2023-04-01 2023-04-01                   NaN
1  A2A     CV 2023-04-05 2023-04-01                   4.0
2  A2A     CV 2023-04-07 2023-04-01                   6.0
3  BB3  Visit 2023-05-05 2023-05-05                   NaN
4  BB3  Visit 2023-05-29 2023-05-29                   NaN
5  BB3     CV 2023-05-30 2023-05-29                   1.0
6  5EE  Visit 2023-06-01 2023-06-01                   NaN
7  5EE     CV 2023-06-10 2023-06-01                   9.0

如果不需要临时的visit_date列,可最后执行df.drop('visit_date', axis=1)删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:35:17