如何用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
相关产品推荐
相关产品推荐

