Excel中计算过去4周唯一客户数量的方法求助
解决方案(基于Pandas)
核心思路
先按周聚合出每周的唯一客户,再通过滑动窗口统计**以当前周为终点的过去4周(含当前周)**内的累计唯一客户数,最后将结果关联回原始数据的每一行。
代码实现
import pandas as pd # 假设你的数据集已加载到df变量中 # df = pd.read_csv("your_data_file.csv") # 1. 转换日期列为标准datetime格式,保证排序准确性 df['Date'] = pd.to_datetime(df['Date']) # 2. 按周分组,提取每周的唯一客户集合 weekly_unique_customers = df.groupby('Year&Week')['客户'].unique().reset_index() # 3. 生成周起始日期,解决跨年周的连续性排序问题 weekly_unique_customers['week_start'] = pd.to_datetime(weekly_unique_customers['Year&Week'].astype(str), format='%Y%W') weekly_unique_customers = weekly_unique_customers.sort_values('week_start').reset_index(drop=True) # 4. 滑动窗口计算过去4周的唯一客户总数 def calc_window_unique(window): # 合并窗口内所有客户列表,去重后统计数量 all_cust = [cust for sublist in window for cust in sublist] return len(set(all_cust)) # 窗口大小设为4,允许最小窗口为1(处理数据集开头不足4周的情况) weekly_unique_customers['past_4weeks_unique'] = weekly_unique_customers['客户'].rolling(window=4, min_periods=1).apply(calc_window_unique, raw=False) # 5. 将计算结果关联回原始数据集 df = df.merge(weekly_unique_customers[['Year&Week', 'past_4weeks_unique']], on='Year&Week', how='left')
结果说明
新增的past_4weeks_unique列即为每行数据对应的目标值:过去4周内至少有一次记录的唯一客户数量。比如原始数据中202238周的行,过去4周涉及客户4、2、6,对应列值为3。
内容的提问来源于stack exchange,提问作者florisviss
相关产品推荐
相关产品推荐

