如何 select 列值中的特定字符串并将其分配给 pandas 中的新列

how to select a particular string from a column value and assign it to a new column in pandas

文档 = [文档 1、文档 2、文档 3]

护士 = [nur1, nur2, nur3]

1st responder Associates
doc1 nur1, nur2
nur1 doc1, nur2
nur3 nur1, nur2, doc2
doc2 nur2, nur1

我想添加一个新列 'Doctor' 和 select 来自“第一响应者”或 'Associates' 的医生,这样得到的 df 就像:

1st responder Associates Doctor
doc1 nur1, nur2 doc1
nur1 doc1, nur2 doc1
nur3 nur1, nur2, doc2 doc2
doc2 nur2, nur1 doc2

我应该使用 apply/map 还是有矢量化方法?

您可以使用:

docs = ['doc1', 'doc2', 'doc3']

df['Doctor'] = df.assign(Associates=df['Associates'].str.split(', ')) \
                 .melt(ignore_index=False).explode('value') \
                 .query('value.isin(@docs)').groupby(level=0)['value'].first()

输出:

1st responder Associates Doctor
doc1 nur1, nur2 doc1
nur1 doc1, nur2 doc1
nur3 nur1, nur2, doc2 doc2
doc2 nur2, nur1 doc2

保留行 where 第一响应者 isin 列表 docs 并在第二列中用 str.extract 填充缺失值。所以

df['Doctor'] = (
    df['1st responder']
      .where(lambda x: x.isin(docs), 
             other = df['Associates'].str.extract(pat='('+'|'.join(docs)+')')[0])
)
print(df)
#   1st responder        Associates Doctor
# 0          doc1        nur1, nur2   doc1
# 1          nur1        doc1, nur2   doc1
# 2          nur2  nur3, nur4, doc2   doc2
# 3          doc2              nur4   doc2

使用的输入

df = pd.DataFrame({
    '1st responder': ['doc1','nur1','nur2','doc2'],
    'Associates' : ['nur1, nur2', 'doc1, nur2', 'nur3, nur4, doc2', 'nur4']
})
docs = ['doc1','doc2', 'doc3']