In [9]:

    import pandas as pd
    import numpy as np

    # 读取数据集 1分
    data = pd.read_csv('patient_data.csv')

In [11]:

    # 1. 统计住院天数超过7天的患者数量及其占比
    # 创建新列'RiskLevel'，根据住院天数判断风险等级 3分
    data['RiskLevel']  =  np.where(data['DaysInHospital'] > 7, '高风险患者', '低风险患者')
    # 统计不同风险等级的患者数量 2分
    risk_counts = data['RiskLevel'].value_counts()
    # 计算高风险患者占比 1分
    high_risk_ratio = risk_counts['高风险患者'] / len(data)
    # 计算低风险患者占比 1分
    low_risk_ratio = risk_counts['低风险患者'] / len(data)

    # 输出结果
    print("高风险患者数量:", risk_counts['高风险患者'])
    print("低风险患者数量:", risk_counts['低风险患者'])
    print("高风险患者占比:", high_risk_ratio)
    print("低风险患者占比:", low_risk_ratio)

    高风险患者数量: 413
    低风险患者数量: 587
    高风险患者占比: 0.413
    低风险患者占比: 0.587

In [13]:

    # 2. 统计不同BMI区间中高风险患者的比例和统计不同BMI区间中的患者数
    # 定义BMI区间和标签
    bmi_bins = [0, 18.5, 24, 28, np.inf]
    bmi_labels = ['偏瘦', '正常', '超重', '肥胖']
    # 根据BMI值划分指定区间 4分
    data['BMIRange'] = pd.cut(data['BMI'], bins=bmi_bins, labels=bmi_labels, right=False)  # 使用左闭右开区间
    # 计算每个BMI区间中高风险患者的比例 2分
    bmi_risk_rate =  data.groupby('BMIRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
    # 统计每个BMI区间的患者数量 1分
    bmi_patient_count = data['BMIRange'].value_counts()

    # 输出结果
    print("BMI区间中高风险患者的比例和患者数:")
    print(bmi_risk_rate)
    print(bmi_patient_count)

    BMI区间中高风险患者的比例和患者数:
    BMIRange
    偏瘦    0.444444
    正常    0.406699
    超重    0.388235
    肥胖    0.415094
    Name: RiskLevel, dtype: float64
    BMIRange
    肥胖    477
    正常    209
    超重    170
    偏瘦    144
    Name: count, dtype: int64

    C:\Users\hello\AppData\Local\Temp\ipykernel_130688\2732890380.py:8: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
      bmi_risk_rate =  data.groupby('BMIRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())

In [7]:

    # 3. 统计不同年龄区间中高风险患者的比例和统计不同年龄区间中的患者数
    # 定义年龄区间和标签
    age_bins = [0, 26, 36, 46, 56, 66, np.inf]
    age_labels = ['≤25岁', '26-35岁', '36-45岁', '46-55岁', '56-65岁', '＞65岁']
    # 根据年龄值划分指定区间 4分
    data['AgeRange'] = pd.cut(data['Age'], bins=age_bins, labels=age_labels,right=False)  # 使用左闭右开区间)
    # 计算每个年龄区间中高风险患者的比例 2分
    age_risk_rate = data.groupby('AgeRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
    # 统计每个年龄区间的患者数量 1分
    age_patient_count = data['AgeRange'].value_counts()

    # 输出结果
    print("年龄区间中高风险患者的比例和患者数:")
    print(age_risk_rate)
    print(age_patient_count)

    年龄区间中高风险患者的比例和患者数:
    AgeRange
    ≤25岁      0.456693
    26-35岁    0.398496
    36-45岁    0.386364
    46-55岁    0.444444
    56-65岁    0.401575
    ＞65岁      0.401254
    Name: RiskLevel, dtype: float64
    AgeRange
    ＞65岁      319
    46-55岁    162
    26-35岁    133
    36-45岁    132
    ≤25岁      127
    56-65岁    127
    Name: count, dtype: int64

    C:\Users\hello\AppData\Local\Temp\ipykernel_130688\2561389961.py:8: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
      age_risk_rate = data.groupby('AgeRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())

In [ ]: