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

如何用Pandas统计12个月滚动窗口内有交易的客户数量?

计算12个月滚动窗口内至少有一笔交易的客户数量

步骤1:预处理数据

先把字符串格式的purchase_date转为datetime类型,同时去重同一客户同一天的重复交易(只要有一笔就计为活跃,无需重复统计):

import pandas as pd

# 示例数据(替换为你的实际DataFrame)
df = pd.DataFrame({
    'customer_id': [1, 2, 1, 3],
    'purchase_date': ['12-01-2023', '11-24-2022', '03-15-2023', '06-20-2023'],
    'purchase_amt': [150.00, 84.23, 90.50, 200.00]
})

# 转换日期格式
df['purchase_date'] = pd.to_datetime(df['purchase_date'], format='%m-%d-%Y')

# 去重:每个客户每个交易日期仅保留一条记录
unique_cust_dates = df.drop_duplicates(subset=['customer_id', 'purchase_date'])

步骤2:生成连续日期序列(按需选择)

如果需要按每日计算滚动窗口的活跃客户数,先生成覆盖数据全时间范围的连续日期:

min_date = unique_cust_dates['purchase_date'].min()
max_date = unique_cust_dates['purchase_date'].max()
date_range = pd.date_range(start=min_date, end=max_date, freq='D')

若只需按每月月末计算,把freq改为'M'即可,大幅减少计算量。

步骤3:两种高效计算方法

方法一:滚动窗口+集合去重(适合中小数据集)

先统计每日活跃客户集合,再用12个月窗口合并集合并统计唯一客户数:

# 按日期分组,获取每日活跃客户的集合
daily_active = unique_cust_dates.groupby('purchase_date')['customer_id'].apply(set)

# 补全缺失日期的空集合
daily_active = daily_active.reindex(date_range, fill_value=set())

# 定义12个月滚动窗口(用DateOffset保证精确月数,避免闰年/月份天数差异)
window = pd.DateOffset(months=12)

# 滚动计算窗口内的唯一客户数量
rolling_active = daily_active.rolling(window).apply(
    lambda x: len(set.union(*x)), raw=False
)

# 整理成结果DataFrame
result = pd.DataFrame({
    'date': rolling_active.index,
    'active_customers': rolling_active.values
})

方法二:日期范围匹配(适合大数据集)

先按客户聚合交易日期,再对每个窗口结束日期筛选符合条件的客户:

# 按客户分组,存储每个客户的所有交易日期
cust_trans_dates = unique_cust_dates.groupby('customer_id')['purchase_date'].apply(list)

# 定义函数:计算指定结束日期前12个月内的活跃客户数
def count_active(end_date):
    start_date = end_date - pd.DateOffset(months=12)
    # 判断客户是否有交易日期落在窗口范围内
    active_flag = cust_trans_dates.apply(lambda dates: any(start_date <= d <= end_date for d in dates))
    return active_flag.sum()

# 批量计算所有日期的活跃客户数
result = pd.DataFrame({
    'date': date_range,
    'active_customers': date_range.map(count_active)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:17:19