檔案 = [檔案 1,檔案 2,檔案 3]
護士 = [nur1,nur2,nur3]
第一回應者 | 同事 |
---|---|
檔案1 | nur1, nur2 |
努爾1 | doc1,nur2 |
努爾3 | nur1、nur2、doc2 |
檔案2 | 努爾2,努爾1 |
我想添加一個新列“醫生”并從“第一回應者”或“關聯者”中選擇醫生,這樣結果 df 就像:
第一回應者 | 同事 | 醫生 |
---|---|---|
檔案1 | nur1, nur2 | 檔案1 |
努爾1 | doc1,nur2 | 檔案1 |
努爾3 | nur1、nur2、doc2 | 檔案2 |
檔案2 | 努爾2,努爾1 | 檔案2 |
我應該使用 apply/map 還是有矢量化方法?
uj5u.com熱心網友回復:
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']
uj5u.com熱心網友回復:
您可以使用:
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()
輸出:
第一回應者 | 同事 | 醫生 |
---|---|---|
檔案1 | nur1, nur2 | 檔案1 |
努爾1 | doc1,nur2 | 檔案1 |
努爾3 | nur1、nur2、doc2 | 檔案2 |
檔案2 | 努爾2,努爾1 | 檔案2 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453490.html
上一篇:將curl命令產生的字典轉換為專案串列-Ansible
下一篇:檢查字典是否為空但有鍵