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

如何按客户筛选Pandas DataFrame,保留其最近3个月内的订单?

解决方案

你的第二个思路(按客户分组计算筛选起始日期再匹配)是完全可行的,问题出在代码细节的处理上,以下是修正后的完整操作步骤:

步骤1:转换日期列类型

首先必须将Order Date列转为datetime格式,否则无法进行日期运算:

import pandas as pd
from pandas.tseries.offsets import DateOffset

# 转换日期列(注意示例日期格式为DD-MM-YYYY,需指定format参数)
df['Order Date'] = pd.to_datetime(df['Order Date'], format='%d-%m-%Y')

步骤2:计算每个客户的筛选起始日期

按Customer ID分组,取每个客户的最新订单日期,再减去3个月得到该客户的有效订单起始阈值:

# 分组计算每个客户的最近订单日期往前3个月的日期
customer_date_threshold = df.groupby('Customer ID')['Order Date'].max() - DateOffset(months=3)
# 转为DataFrame格式,方便后续合并
customer_date_threshold = customer_date_threshold.reset_index(name='Last_purchase_3M')

步骤3:合并筛选阈值到原数据集

将计算好的起始日期合并回原DataFrame,让每条订单都能对应到所属客户的筛选标准:

df_merged = df.merge(customer_date_threshold, on='Customer ID', how='left')

步骤4:筛选符合条件的订单

直接对比订单日期与对应客户的起始阈值即可完成筛选,注意逻辑运算的优先级,需给每个比较条件单独加括号:

df_filtered = df_merged.loc[df_merged['Order Date'] >= df_merged['Last_purchase_3M']]

原代码报错原因说明

你之前的代码报错主要源于两个问题:

  • 日期列未转为datetime类型,导致无法与DateOffset进行运算
  • 逻辑运算符&的优先级高于比较运算符,未给比较条件加括号会导致类型不匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:36:28