基于Pandas的多级推荐系统统计需求及代码问题求助
多级推荐用户统计解决方案
一、Python Pandas 修正方案
原代码的核心问题是没有建立上下级推荐关系的映射,只是单纯按层级拆分计数,无法形成真正的推荐金字塔结构。以下是修正后的实现:
实现代码
import pandas as pd # 读取原始数据 df = pd.read_excel("L0-L5.xlsx", sheet_name="Sheet1") # 转换日期格式(若无需按日期筛选可省略此步) df["invited_at"] = pd.to_datetime(df["Rem Date"], format="%d.%m.%Y") # 定义层级顺序:L0为用户本身,L1-L5为各级推荐用户 levels = ["L0", "L1", "L2", "L3", "L4", "L5"] result_frames = [] # 逐层统计上级对应的下级数量 for i in range(1, len(levels)): parent_col = levels[i-1] child_col = levels[i] # 筛选非空数据,按上级分组统计下级数量 level_stats = df[[parent_col, child_col]].dropna()\ .groupby(parent_col).count()\ .rename(columns={child_col: f"第{i}级推荐人数"}) result_frames.append(level_stats) # 合并所有层级统计结果,空值填充为0 final_result = pd.concat(result_frames, axis=1, join="outer").fillna(0) final_result = final_result.rename_axis("user_id").reset_index() # 保存结果到Excel final_result.to_excel("推荐金字塔统计.xlsx", index=False)
代码说明
- 遍历L1到L5层级,每一层都基于上一层级(如L1的上级是L0)分组,统计每个上级拥有的下级数量。
- 合并所有层级结果后用
fillna(0)补全无推荐用户的统计值,确保每个用户都有完整的各级推荐数。
二、Excel 手动统计方案
如果不想用代码,可通过Excel的COUNTIFS函数实现:
操作步骤
- 提取唯一用户ID:新建工作表,从原表L0列提取所有唯一用户ID(通过「数据>删除重复值」完成)。
- 添加统计列:在新表中依次添加
一级推荐人数、二级推荐人数…五级推荐人数列。 - 写入统计公式:
- 一级推荐人数(统计当前用户作为L0时的L1数量):
(替换=COUNTIFS(Sheet1!$L0列:$L0列, A2, Sheet1!$L1列:$L1列, "<>")L0列/L1列为原表对应列标,A2为当前用户ID单元格) - 二级推荐人数(统计当前用户作为L0时的L2数量):
=COUNTIFS(Sheet1!$L0列:$L0列, A2, Sheet1!$L2列:$L2列, "<>") - 后续层级以此类推,替换对应列标即可。
- 一级推荐人数(统计当前用户作为L0时的L1数量):
- 批量应用公式:下拉公式完成所有用户的统计。
按月份统计扩展
若需按月统计,可在COUNTIFS中添加日期条件:
=COUNTIFS(Sheet1!$L0列:$L0列, A2, Sheet1!$L1列:$L1列, "<>", Sheet1!$日期列:$日期列, ">="&DATE(2024,1,1), Sheet1!$日期列:$日期列, "<="&DATE(2024,1,31))
内容的提问来源于stack exchange,提问作者Saba Tananashvili
相关产品推荐
相关产品推荐

