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

Pandas如何按列条件提取行:从NEW状态到PAID状态停止并计算耗时

实现方案

步骤1:数据预处理

首先统一列名,将日期列转换为datetime格式方便后续计算时长:

import pandas as pd

# 假设原始数据已读入df,先调整列名
df.columns = ['Date', 'Status', 'Client']
# 转换日期格式
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

步骤2:过滤符合要求的行

按照示例规则,过滤逻辑为:按客户分组后,忽略CANCELLED记录及关联的无效PAID记录,仅保留连续NEW状态后紧接的对应PAID记录:

# 存储符合要求的行索引
keep_idx = []

for client, group in df.groupby('Client', sort=False):
    group = group.sort_values('Date').reset_index()
    valid_new_start = None
    for idx, row in group.iterrows():
        if row['Status'] == 'NEW':
            if valid_new_start is None:
                valid_new_start = idx
            keep_idx.append(row['index'])
        elif row['Status'] == 'PAID':
            if valid_new_start is not None:
                keep_idx.append(row['index'])
                valid_new_start = None
        # 遇到CANCELLED重置当前有效NEW序列
        elif row['Status'] == 'CANCELLED':
            valid_new_start = None

# 得到过滤后的df
df_filtered = df.loc[keep_idx].reset_index(drop=True)

此时得到的df_filtered就是你需要的筛选后结果表。

步骤3:统计NEW到PAID的时长

对过滤后的数据按客户分组,统计每个NEW到PAID周期的时长:

res = []
for client, group in df_filtered.groupby('Client', sort=False):
    group = group.sort_values('Date').reset_index(drop=True)
    i = 0
    while i < len(group):
        if group.loc[i, 'Status'] == 'NEW':
            # 找到当前NEW序列的起始日期
            start_date = group.loc[i, 'Date']
            # 找到对应PAID的位置
            while i < len(group) and group.loc[i, 'Status'] == 'NEW':
                i += 1
            if i < len(group) and group.loc[i, 'Status'] == 'PAID':
                end_date = group.loc[i, 'Date']
                days = (end_date - start_date).days
                res.append({'Client': client, 'NEW日期': start_date, 'PAID日期': end_date, '间隔天数': days})
        i += 1

# 转为DataFrame
df_duration = pd.DataFrame(res)

如果需要统计每个客户的平均转化时长,可再对df_duration按Client字段聚合求平均值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:05