![](/img/trans.png)
[英]How to loop through a list using each item from a list only once to insert at the beginning of another list in Python?
[英]loop through a list and compare each item with another whole list
表格1
表 2
我希望能够将列 ['Prescribed'] 中的每个项目或行与整个表 2 列 ['Name'] 进行比较,以便能够在表 1 中的每一行中创建一个列 ['category'] 行。使用 Pandas 数据帧或任何可能的 python 方法
表1(上图1)
test_text = "Amlodipine [ Amlodipine | 10 mg | Tablet | OD | For 60 Days ], Cetirizine [ Cetirizine | 10 mg | Tablet | OD | For 5 Days ]"
表2(上图2)
comparison_list = ['Amlodipine', 'Tylenol', 'Advil']
预期结果:
Return True if 'Amlodipine' is in test_text
以下是我尝试过的一些方法。
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
如果有任何解决方案,我很乐意知道。 关于如何更整洁的建议也受到赞赏。 如果也有关于如何进行此操作的链接或书籍可供阅读,我很乐意了解它们。
IIUC,您想从table2['Name']
提取药物名称,然后将其用作比较列表,以查找 table1['Prescription'] 中是否存在任何这些名称。
如果这是你想要的,那么试试这个 -
str
函数(如replace
、 split
和strip
为您的比较列表提取唯一的药物名称。'|'.join()
将这些独特的药物与OR
连接器连接起来,以使用另一个向量化str
函数str.contains
查找table1['Prescription]'
是否存在任何str.contains
- 注意 1:使用 apply 函数处理字符串不如在 Pandas 中使用
str
方法有效。- 注 2:正则表达式
[\\(\\[].*?[\\)\\]]
用于去除()
或[]
括号内的文本并仅返回外的文本,即药物名称. 随意更换任何其他东西。
#Get unique drung names from table2
unique_drugs = table2['Name'].str.replace('[\(\[].*?[\)\]]','',regex=True)\
.str.split(',')\
.explode()\
.str.strip()\
.unique()
#Flag if any of them occur in table1
table1['flag'] = table1['Prescription'].str.contains('|'.join(unique_drugs))
print(table2['flag'])
0 True
1 True
2 True
3 True
Name: Prescription, dtype: bool
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.