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

按客户分组、日期排序规则有序填充Buying_Round列缺失值

客户到店消费轮次缺失值填充方案

现有生鲜门店消费数据集包含4个字段:

  • CustomerID:客户唯一识别号
  • Buying_Round:客户第n次到店消费的轮次,存在NaN空值
  • Date:消费日期
  • Purchase_amount$:消费金额
    需求为按CustomerID分组后组内按日期升序排序,填充Buying_Round的空值:组内最早消费记录对应轮次为1,后续依次累加,同时保留组内原有非空的Buying_Round值。
    以下为基于Python Pandas的非硬编码实现方案,适配11000个唯一客户的计算量级:

实现代码

import pandas as pd

# 步骤1:导入原始数据到DataFrame,此处替换为自身数据源读取逻辑即可
# df = pd.read_csv("你的原始数据文件路径.csv")

# 步骤2:将Date字段转为datetime格式,避免字符串排序导致的逻辑错误
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')

# 步骤3:按客户ID、消费日期升序排序,保证时序逻辑正确
df = df.sort_values(by=['CustomerID', 'Date'], ignore_index=True)

# 步骤4:生成组内递增轮次,仅填充Buying_Round的空值
df['Buying_Round'] = df['Buying_Round'].fillna(
    df.groupby('CustomerID').cumcount() + 1
)

方案说明

  • 全程无硬编码逻辑,无需提前用value_counts统计各客户消费次数,Pandas内置分组方法自动适配不同客户的消费频次
  • 仅填充Buying_Round列的空值,原有非空的有效数据会完整保留,符合需求要求
  • 11000个唯一客户的量级属于轻量计算,全程无自定义遍历逻辑,运行效率高

可选校验逻辑

如果需要确认原有非空的Buying_Round是否和时序排序逻辑匹配,可以新增校验列排查异常:

# 生成标准轮次列用于对比
df['standard_round'] = df.groupby('CustomerID').cumcount() + 1
# 筛选出原有非空轮次和标准轮次不匹配的异常记录
abnormal_records = df[df['Buying_Round'].notna() & (df['Buying_Round'] != df['standard_round'])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:15:04