Python 如果不是这样的话

Python 如果不是这样的话,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个类似于其他问题的谜题,但有一个小小的转折 我有一个数据帧-见下文。每个记录都是唯一的,有些记录在Concat列中有多个允许位置。CONCAT列反映了患者入院位置状态的进展 我想知道病人的结局 我知道,如果CONCAT列中的文本是'3E PICU'或'6EN'或'3MN'或'6E'或'3MC',无论该列中是否有其他文本,它们都以ICU结尾 我知道,如果患者有以下任何入院位置,且有CONCAT列,没有任何ICU位置,则可以将其视为“急性”:“4E”或“5E NSU”或“3E HKU”(完整位

我有一个类似于其他问题的谜题,但有一个小小的转折

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

我想知道病人的结局

我知道,如果
CONCAT
列中的文本是'3E PICU'或'6EN'或'3MN'或'6E'或'3MC',无论该列中是否有其他文本,它们都以ICU结尾

我知道,如果患者有以下任何入院位置,且有
CONCAT
列,没有任何ICU位置,则可以将其视为“急性”:“4E”或“5E NSU”或“3E HKU”(完整位置列表见下文代码)

我知道,如果患者有APU或CPU或PSU,而不考虑
CONCAT
列中的任何其他位置,他们可以被视为“精神病”

我知道,若患者不被视为ICU或急性或精神病患者,他们就不会入院

当前数据

 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)
与给定的
regex
模式一起使用,然后根据条件
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

np.选择([条件1,条件2,条件3],[value1,value2,value3])
应该解决的问题是,急性指定仍然可能吸引ICU患者,因为一些ICU患者也有急性入院位置。
'3E PICU'
ID
3显示的ICU字符串中只有
PICU
。我的错误-我已将其改为“3E PICU”,感谢它运行,但
承认状态
列中的每条记录都显示“不承认”,这是不正确的。@Raven根据您提供的数据,这应该会产生正确的结果。谢谢,你能帮我理解(“(?i)(?:….$”)指示代码做什么吗?
(?i)
是不区分大小写的匹配标志,它相当于设置
case=False
(?:)
是一个非捕获组,
$
用于指示行尾的位置。如果在
Concat
列中没有逗号分隔位置,您的代码是否会更改?