如何统计用户用药数据中不同药物组合的使用频次
多用户药物联用组合频次统计实现方案
核心处理逻辑分三步:
- 按用户ID聚合单用户的全部用药记录,对药物去重后排序,生成固定顺序的用药组合,避免同组药物顺序不同导致统计重复
- 对所有用户的用药组合做频次计数
- 排序后输出频次表,直接提取最高频组合即可
可直接运行的参考代码如下:
import pandas as pd from collections import Counter # 按用户分组聚合用药列表,转成排序后的元组(可哈希,支持计数) user_meds = df.groupby('user_id')['medicine_name']\ .apply(lambda x: tuple(sorted(x.unique()))) # x.unique()做单用户用药去重,sorted()固定组合内顺序 # 统计各组合出现次数 combo_count = Counter(user_meds) # 生成结构化频次表,按使用人数倒序排列 combo_freq_df = pd.DataFrame( [{"联用组合": "、".join(combo), "使用人数": cnt} for combo, cnt in combo_count.items()] ).sort_values("使用人数", ascending=False, ignore_index=True) # 提取最高频联用组合 highest_freq_combo = combo_freq_df.iloc[0]
统计效果和需求示例完全匹配:比如5人同时用a和b、4人同时用a/b/c的场景,最终输出的频次表会准确对应两个组合的人数,排序后第一行就是最高频组合。
几个容易踩的坑提前说明:
- 单用户维度必须做药物去重,要是原始数据里存在同一个用户同一种药的多条录入记录,不去重会生成错误的组合
- 组合内药物必须做排序,否则
(药a,药b)和(药b,药a)会被识别成两个不同组合,导致频次统计拆分错误 - 如果只需要统计固定药数的联用(比如只看2药联用、只看3药联用),在计数前过滤元组长度即可,比如
[combo for combo in user_meds if len(combo)==2]就能筛出所有两药联用的组合再计数。
内容的提问来源于stack exchange,提问作者ASmith
相关产品推荐
相关产品推荐

