我有一个困惑,与其他问题类似,但是有一点曲折。
我有一个数据框-见下文。每个记录都是唯一的,并且某些记录在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)
答案 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