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

基于pandas统计DataFrame日期滚动窗口指定列唯一值并新增列

Pandas 固定时间窗口统计字段唯一值实现方案

核心需求梳理

  • 固定统计基准日期:2022年10月15日
  • 统计规则:分别计算基准日期往前7天、30天、60天三个时间窗口内,dealer(经销商)列的去重计数
  • 输出要求:将三个窗口的统计结果作为新字段追加到原DataFrame中

具体实现代码

前置处理

第一步必须先把日期列转换为Pandas标准时间格式,否则时间范围过滤会出错:

import pandas as pd

# 转换日期列格式
df['date'] = pd.to_datetime(df['date'])
# 定义基准日期
base_date = pd.to_datetime('2022-10-15')

固定基准日窗口统计

因为是固定基准日期的全局统计,计算结果为固定值,直接过滤时间范围后计算唯一值数量,赋值给新列即可:

# 近7天唯一经销商数,边界可根据业务调整:如果不含基准日当天,把 <= 改为 <
df['dealer_cnt_7d'] = df.loc[
    (df['date'] >= base_date - pd.Timedelta(days=7)) & (df['date'] <= base_date),
    'dealer'
].nunique()

# 近30天唯一经销商数
df['dealer_cnt_30d'] = df.loc[
    (df['date'] >= base_date - pd.Timedelta(days=30)) & (df['date'] <= base_date),
    'dealer'
].nunique()

# 近60天唯一经销商数
df['dealer_cnt_60d'] = df.loc[
    (df['date'] >= base_date - pd.Timedelta(days=60)) & (df['date'] <= base_date),
    'dealer'
].nunique()

运行后三个新列会自动填充到所有行,和预期输出效果一致。

扩展场景适配

如果业务需求变更为逐行以当前行的日期为基准,统计每行往前N天的唯一经销商数,可以使用时间滚动窗口实现:

# 将日期设为索引并按时间升序排序
df = df.set_index('date').sort_index()

# 批量计算三个窗口的统计值
for window_days in [7, 30, 60]:
    df[f'dealer_cnt_{window_days}d'] = df['dealer'].rolling(
        window=f'{window_days}D',
        closed='left'  # 窗口边界规则:left表示不含当日,right表示含当日,按业务需求调整
    ).apply(lambda x: x.nunique())

# 重置索引还原原表结构
df = df.reset_index()

注意事项:如果需要按区域、门店等其他维度分组统计窗口内的唯一经销商数,只需要在过滤/滚动逻辑前增加groupby对应维度字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:57:18