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

Python实现多列疾病组合的出现频率统计方案咨询

疾病组合频率统计解决方案

核心思路

通过itertools.combinations生成所有2、3、4列的疾病组合,逐行判断组合内疾病是否同时出现,最终统计每个组合的出现次数。以下是基于Pandas的实现脚本,直接输出统计结果。

完整代码示例

import pandas as pd
from itertools import combinations
from collections import defaultdict

def count_disease_combinations(df, min_size=2, max_size=4):
    # 初始化频率统计字典
    combo_freq = defaultdict(int)
    disease_columns = df.columns.tolist()
    
    # 遍历2到4列的组合长度
    for combo_length in range(min_size, max_size + 1):
        # 生成当前长度的所有疾病列组合
        for cols in combinations(disease_columns, combo_length):
            combo_name = '&'.join(cols)
            # 判断每行是否所有疾病都存在(假设1=患病,0=未患病)
            is_combo_present = df[list(cols)].all(axis=1)
            # 统计该组合出现的次数
            combo_freq[combo_name] = is_combo_present.sum()
    
    # 转换为DataFrame并按频率降序排列
    result_df = pd.DataFrame(
        list(combo_freq.items()),
        columns=['疾病组合', '出现频率']
    ).sort_values('出现频率', ascending=False)
    
    return result_df

# ---------------------- 测试用例 ----------------------
# 模拟疾病数据(1表示患病,0表示未患病)
sample_data = pd.DataFrame({
    '糖尿病': [1, 0, 1, 1, 0],
    '高血压': [1, 1, 0, 1, 0],
    '冠心病': [0, 1, 1, 1, 0],
    '高血脂': [1, 0, 0, 1, 1]
})

# 执行统计并打印结果
stat_result = count_disease_combinations(sample_data)
print(stat_result)

关键细节说明

  • 数据适配:如果你的疾病标记不是1/0,而是布尔值、"患病"/"未患病"等,只需修改is_combo_present的判断逻辑:
    • 布尔值:is_combo_present = df[list(cols)].all(axis=1)(直接使用)
    • 文本标记:is_combo_present = (df[list(cols)] == "患病").all(axis=1)
  • 结果格式:最终返回的DataFrame包含两列,分别是疾病组合名称(如"糖尿病&高血压")和对应的出现频率,已按频率降序排列,方便查看高频组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:19:01