表格1
| 日期 | 規定 |
|---|---|
| 16-05-2017 | 氨氯地平 [ 氨氯地平 | 10 毫克 | 平板電腦 | 外徑| 60 天], 西替利嗪 [ 西替利嗪 | 10 毫克 | 平板電腦 | 外徑| 5天] |
| 15-05-2017 | 頭孢呋辛[ ZINNAT | 500MG | 平板電腦 | 投標 | 7天] |
| 17-05-2017 | 西替利嗪 [西替利嗪 | 5 毫克/5 毫升 | 糖漿 | 投標 | 5天] |
表 2
| 姓名 | 類別 |
|---|---|
| 賴諾普利(賴諾普利 | 10 毫克 | 片劑) | 心血管藥物 |
| 氨氯地平(氨氯地平 | 10 毫克 | 片劑) | 心血管藥物 |
| 依諾肝素鈉 (80mg)(氯烷 8000 iu | 80mg | 0) | 心血管藥物 |
我希望能夠將列 ['Prescribed'] 中的每個專案或行與整個表 2 列 ['Name'] 進行比較,以便能夠在表 1 中的每一行中創建一個列 ['category'] 行。使用 Pandas 資料幀或任何可能的 python 方法
更多說明(或示例)
表 1(從上)
test_text = "Amlodipine [ Amlodipine | 10 mg | Tablet | OD | For 60 Days ], Cetirizine [ Cetirizine | 10 mg | Tablet | OD | For 5 Days ]"
表 2(從上)
comparison_list = [ 'Amlodipine (Amlodipine | 10 mg | Tablet)' , 'Acetaminophen(Tylenol | 500mg| Tablet)' , 'Ibuprofen(Advil | 400mg | Tablet)']
預期結果:
Return True if 'Amlodipine' is in test_text
有一個像下面這樣的決賽桌 | 日期 | 規定 | 結果 | |:---- |:------:|:------:| | 16-05-2017| 氨氯地平 [ 氨氯地平 | 10 毫克 | 平板電腦 | 外徑| 60 天], 西替利嗪 [ 西替利嗪 | 10 毫克 | 平板電腦 | 外徑| 5 天 ]|真| | 15-05-2017 | 頭孢呋辛[ ZINNAT | 500MG | 平板電腦 | 投標 | 7 天] |假| | 17-05-2017 | 西替利嗪 [西替利嗪 | 5 毫克/5 毫升 | 糖漿 | 投標 | 5天]|假|
以下是我嘗試過的一些方法。
for i in table1['Prescribed']:
split_data = i.split(",")
for b in split_data:
if any(str(b) in s for s in table2['Name']):
print('true')
elif str(b) in table2['Name']:
print('perfect')
else:
print('false')
輸出:
false
false
false
false
false
false
false
false
不拆分文本:
for i in table1['Prescribed']:
if any(str(i) in s for s in table2['Name']):
print('true')
elif str(i) in table2['Name']:
print('perfect')
else:
print('false')
結果:
false
false
false
false
false
false
false
如果有任何解決方案,我很樂意知道。關于如何更整潔的建議也受到贊賞。如果也有關于如何進行此操作的鏈接或書籍可供閱讀,我很樂意了解它們。
uj5u.com熱心網友回復:
IIUC,您想從中提取藥物名稱table2['Name'],然后將其用作比較串列,以查找表 1['Prescription'] 中是否存在任何這些名稱。
如果這是你想要的,那么試試這個 -
- 使用,和
str等矢量化函式為您的比較串列提取唯一的藥物名稱。replacesplitstrip - 接下來使用
'|'.join()連接OR器將這些獨特的藥物連接起來table1['Prescription]',以使用另一個矢量化str函式查找其中是否存在任何藥物str.contains
- 注意 1:使用 apply 函式處理字串不如使用
strpandas 中的方法有效。
- 注 2:正則運算式
[\(\[].*?[\)\]]用于洗掉()或[]括號內的文本并僅回傳外部文本,即藥物名稱。隨意用其他任何東西替換它。
#STEP 1: Get unique drugs from the table2
unique_drugs = table2['Name'].str.replace('[\(\[].*?[\)\]]','',regex=True)\
.str.split(',')\
.explode()\
.str.strip()\
.unique()
## unique_drugs : array(['Lisinopril', 'Amlodipine', 'Enoxaparin Sodium'], dtype=object)
# STEP 2: FIND MATCHING DRUGS IN THE DATA
table1['flag'] = table1['Prescribed'].str.contains('|'.join(unique_drugs))
print(table1)
Date Prescribed flag
0 16-05-2017 Amlodipine [ Amlodipine | 10 mg | Tablet | OD ... True
1 15-05-2017 CEFUROXIME[ ZINNAT | 500MG | Tablet | BID | Fo... False
2 17-05-2017 Cetirizine [Cetirizine | 5 mg/5 mL | Syrup | B... False
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/333953.html
上一篇:我從.NET5升級到.NET6,現在從LINQ查詢中獲取SqlNullValueException
下一篇:Pandas資料幀無效密鑰
