IF ELSE条件熊猫

时间:2020-06-24 14:19:37

标签: python pandas dataframe

我有一个困惑,与其他问题类似,但是有一点曲折。

我有一个数据框-见下文。每个记录都是唯一的,并且某些记录在Concat列中具有多个允许位置。 CONCAT列反映了患者入院位置状态的进展。

我想知道病人在哪里结束。

我知道,如果CONCAT列中的文本是'3E PICU'或'6EN'或'3MN'或'6E'或'3MC',无论该列中是否有其他文本,在ICU中结束。

我知道,如果患者在CONCAT列中具有以下任一接纳位置,没有任何ICU位置都可以被视为“急性”:“ 4E”或“ 5E NSU”或“ 3E HKU”(有关位置的完整列表,请参见下面的代码)。

我知道,如果无论CONCAT列中的任何其他位置,患者都有APU,CPU或PSU,都可以认为他们是“精神病”。

我知道,如果不将患者视为ICU,ACUTE或PSYCH,则不会收治他们。

当前数据

 ID              Concat 
  1              MAIN, 3E HKU, 6EN 
  2              ED Eval and Treatment Unit
  3              ED Main, 3E PICU
  4              ED Main, APU

所需数据

 ID              Concat                              Admit Status 
  1              MAIN, 3E HKU, 6EN                       ICU
  2              ED Eval and Treatment Unit            Non-Admit
  3              ED Main, PICU                           ICU
  4              ED Main, APU                           Psych
  5              ED Main, 5E NSU, 3E HKU                Acute

我对str.contains代码很熟悉,但是我需要一些帮助以不合逻辑的方式映射代码,尤其是在需要其他条件的情况下。

 condition_one=new_ADM1["concat"].str.contains("3E PICU|6EN|3MN|6E|3MC", case=False)
 condition_two=new_ADM1["concat"].str.contains("4E|5E NSU|3E HKU|3E|4MN|5E SCU|4MA|7E|7E IRU", case=False)
 condition_three=new_ADM1["concat"].str.contains("APU|CPU|PSU", case=False)

1 个答案:

答案 0 :(得分:1)

使用Series.str.contains和给定的regex模式,然后使用np.select根据条件m1, m2 & m3从选项中选择项目:

m1 = df["Concat"].str.contains("(?i)(?:3E PICU|6EN|3MN|6E|3MC)$")
m2 = df["Concat"].str.contains("(?i)(?:4E|5E NSU|3E HKU|3E|4MN|5E SCU|4MA|7E|7E IRU)$")
m3 = df["Concat"].str.contains("(?i)(?:APU|CPU|PSU)$")

df['Admit Status'] = np.select([m1, m2, m3], ['ICU', 'Acute', 'Psych'], 'Non-Admit')

结果:

# print(df)
   ID                      Concat Admit Status
0   1           MAIN, 3E HKU, 6EN          ICU
1   2  ED Eval and Treatment Unit    Non-Admit
2   3            ED Main, 3E PICU          ICU
3   4                ED Main, APU        Psych