【问题标题】:How to create a new column based on conditions in other columns? [duplicate]如何根据其他列的条件创建新列? [复制]
【发布时间】:2022-02-17 06:24:07
【问题描述】:

我有一个数据框,其中有一个年龄列和一个包含健康状况列表的列。我想创建一个新列,根据一个人的年龄和健康状况指示他们是否属于“高风险”。因此,任何超过 40 岁或患有特定列表中的至少一种疾病(即肥胖、糖尿病、高血压)的人都会在新的“高风险”列中选择“是”。

我使用下面的代码过滤年龄

df['High risk'] = np.where(df['Age'] >= 40, 'Yes', 'No')

但是,我不知道如何搜索健康状况列来过滤其他状况。最终,我希望我的数据框看起来像这样:

   Age     Health Conditions    High risk
0   45    anemia, hypertension     Yes
1   26    diabetes, obesity        Yes
2   38         anemia               No
3   56     arthritis, asthma       Yes

【问题讨论】:

    标签: python pandas dataframe numpy


    【解决方案1】:

    np.where 接受三个参数。第一个是逻辑阵列。您可以在Health Condition 上尝试str.contains 以及Age 列上的逻辑语句。我想出的如下:

    import pandas as pd
    import numpy as np
    df = pd.DataFrame({"Age":[45,26,38,56], "Health Conditions":["anemia, hypertension", "diabetes, obesity", "anemia", "arthritis, asthma"]})
    mask = (df["Age"] > 40) | (df["Health Conditions"].str.contains("obesity|diabetes|hypertension"))
    df["High risk"] = np.where(mask, "Yes", "No")
    df
    

    输出

    Age Health Conditions High risk
    0 45 anemia, hypertension Yes
    1 26 diabetes, obesity Yes
    2 38 anemia No
    3 56 arthritis, asthma Yes

    说明

    str.contains 接受一个正则表达式模式的参数。 obesity|diabetes|hypertension 表示输入字符串是否是上述三种疾病之一。如果您有兴趣在此条件下添加更多疾病,只需遵循此正则表达式中使用的模式即可。(“|”表示 OR)。

    【讨论】:

      【解决方案2】:

      这个怎么样,假设高危年龄超过 40 岁或患有贫血症:

      import pandas as pd
      data = [[45, 'anemia'], [30, 'anemia'], [30, 'arthritis']]
      df = pd.DataFrame(data, columns = ['Age', 'Conditions'])
      
      def HighRisk(row):
        if row['Age'] >= 40:
          HR = True
        if 'anemia' in row['Conditions']:
          HR = True
        else:
          HR = False
        return HR #Returns HR = True if high risk, False if not
      
      df['High risk'] = df.apply(HighRisk, axis = 1)
      
      print(df)
      

      给出输出:

      Age Conditions  High risk
      0   45  anemia  True
      1   30  anemia  True
      2   30  arthritis   False
      

      您可以根据您对某人高风险的定义来调整HighRisk 函数。

      【讨论】:

        【解决方案3】:

        我会为这样的事情使用布尔运算。

        hr_conditions = ["obesity", "diabetes", "hypertension"]
        case1 = df["Age"] > 40
        case2 = df["Conditions"].apply(lambda x: any([c in x for c in hr_conditions))
        df["HighRisk"] = case1 & case2
        

        【讨论】:

          猜你喜欢
          • 2021-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          • 2020-04-25
          • 1970-01-01
          • 1970-01-01
          • 2020-09-24
          相关资源
          最近更新 更多