繁体   English   中英

循环遍历列表并将每个项目与另一个完整列表进行比较

[英]loop through a list and compare each item with another whole list

表格1

表格1


表 2

表 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'] 中是否存在任何这些名称。

如果这是你想要的,那么试试这个 -

  1. 使用矢量化str函数(如replacesplitstrip为您的比较列表提取唯一的药物名称。
  2. 接下来使用'|'.join()将这些独特的药物与OR连接器连接起来,以使用另一个向量化str函数str.contains查找table1['Prescription]'是否存在任何str.contains
  1. 注意 1:使用 apply 函数处理字符串不如在 Pandas 中使用str方法有效。
  2. 注 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM