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

如何用Pandas判断指定客户是否在上月或前两月有购买行为(特殊日期格式)

处理特殊年月格式并判断客户折扣资格的Pandas实现

核心思路

把特殊的年/月格式转成可直接计算的数值(比如1401/08转成1401*12+8=16820),这样就能轻松对比当前月与上月、前两月的关系,避免日期格式转换的麻烦。

具体步骤与代码示例

1. 准备示例数据

假设我们有如下购买记录(包含历史购买和本月购买):

import pandas as pd

# 模拟购买数据:客户、年月(特殊格式)
purchase_data = pd.DataFrame({
    '客户': ['Alice', 'Bob', 'Sara', 'Sara', 'Sara'],
    '年月': ['1401/06', '1401/07', '1401/07', '1401/08', '1401/05']
})

# 提取本月有购买行为的客户列表(这里从数据中筛选,也可根据业务输入)
current_month_customers = purchase_data[purchase_data['年月'] == '1401/08']['客户'].unique()

2. 转换年月为可计算数值

写一个简单函数,把年/月字符串转成整数,方便月份差计算:

def convert_ym_to_num(ym_str):
    year, month = map(int, ym_str.split('/'))
    return year * 12 + month

# 给数据添加转换后的数值列
purchase_data['年月数值'] = purchase_data['年月'].apply(convert_ym_to_num)

3. 确定目标月份(上月、前两月)

先获取当前月份的数值,再计算出需要检查的目标月份数值:

# 动态获取当前月份(从本月购买记录中取,避免硬编码)
current_ym_str = purchase_data[purchase_data['客户'].isin(current_month_customers)]['年月'].unique()[0]
current_ym_num = convert_ym_to_num(current_ym_str)

# 上月=当前数值-1,前两月=当前数值-2
target_ym_nums = {current_ym_num - 1, current_ym_num - 2}

4. 筛选符合折扣条件的客户

检查本月客户是否在上月或前两月有购买记录:

# 筛选出所有目标月份的购买记录
target_purchases = purchase_data[purchase_data['年月数值'].isin(target_ym_nums)]

# 找出同时属于本月购买客户且有目标月份记录的人
eligible_customers = target_purchases[target_purchases['客户'].isin(current_month_customers)]['客户'].unique()

print("符合折扣条件的客户:", eligible_customers)
# 输出:符合折扣条件的客户: ['Sara']

关键说明

  • 这种数值转换方法天然支持跨年场景,比如1401/01的上月是1400/12,转换后数值为1401*12+1=16813,减1后是16812=1400*12+12,完全正确。
  • 当前月份的获取可以根据业务场景调整,比如从系统参数、输入参数中获取,不需要依赖购买数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:00:40