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

如何在DataFrame中添加客户首次购买日期列以区分新老客户

解决方案:为大型交易数据集添加客户首次购买日期列

针对百万级交易数据,我们可以用Pandas的高效分组操作快速添加客户首次购买日期列,同时可基于此按月区分新老客户。

步骤1:数据准备与日期格式转换

首先确保日期列是可计算的datetime类型,这是准确获取首次购买日期的前提:

import pandas as pd

# 读取数据集(示例用模拟数据,实际替换为read_csv等读取方式)
df = pd.DataFrame({
    'Client_ID': ['Jhon', 'Jhon'],
    'Date': ['2022-08-25', '2022-09-26'],
    'Product': ['google', 'uber'],
    'Price': ['USD 10,00', 'USD 25,00']
})

# 将Date列转换为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

步骤2:添加首次购买日期列

通过groupby按客户分组,再用transform('min')将每个客户的最早购买日期映射到该客户的每一行数据中:

# 新增Cliente_firt_buy列,存储每个客户的首次购买日期
df['Cliente_firt_buy'] = df.groupby('Client_ID')['Date'].transform('min')

执行后你的DataFrame会和预期一致:

Client_ID       Date Product     Price Cliente_firt_buy
0      Jhon 2022-08-25  google  USD 10,00       2022-08-25
1      Jhon 2022-09-26    uber  USD 25,00       2022-08-25

步骤3:按月区分新老客户

基于首次购买日期和当前交易日期的月份,判断客户类型:

# 新增Client_Type列,标记新/老客户
df['Client_Type'] = df.apply(
    lambda row: '新客户' if row['Date'].strftime('%Y-%m') == row['Cliente_firt_buy'].strftime('%Y-%m') else '老客户',
    axis=1
)

性能说明

groupby+transform是Pandas的矢量化操作,避免了低效的逐行循环,能够高效处理百万级数据集。如果数据量远超百万级,可考虑使用Dask进行分布式处理,但常规场景下Pandas完全足够。

内容的提问来源于stack exchange,提问作者FábioRB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:15:20