gpt4 book ai didi

python - 使用 AND 或 OR 选项在多列中的数据框中进行多字符串搜索

转载 作者:行者123 更新时间:2023-12-04 09:21:44 25 4
gpt4 key购买 nike

我可以在每列中进行单个单词搜索,但无法使用“和”“或”选项搜索用户提供的字符串搜索数量

   0     1    3   4     
0 [OH-] [Na+] NAN CCO

1 [OH-] [Na+] CCO Cl
这个有效
search = 'CCO' 
df.loc[df.isin([search]).any(axis=1)].index.tolist()


对于多搜索我试过
import re

terms = ['C1', 'CCO']
p = r'\b(?:{})\b'.format('|'.join(map(re.escape, terms)))
df[df['col'].str.contains(p)]
给我 KeyError: 'col'预期输出
Search='C1' AND '[NA+]
结果 1
Search='CCO' OR 'C1'
结果 0 1

最佳答案

我以这种方式创建了您的数据框:

df = pd.DataFrame( { 0 : ["[OH-]","[Na+]","NAN","CCO" ], 1 :  ["[OH-]","[Na+]","CCO","Cl"] } ).transpose()
产生这个 df:
       0      1    2    3
0 [OH-] [Na+] NAN CCO
1 [OH-] [Na+] CCO Cl
我观察到您可以使用 df 上的 isin() 函数执行 OR 逻辑:
df.isin(['CCO','C1'])
产量:
       0      1      2      3
0 False False False True
1 False False True False
因此,您可以使用 any(1) 找出匹配的行当您使用时:
df.isin(['CCO','C1']).any(1).index.tolist()
产量:
[0, 1]
AND 的逻辑:
下面的代码段单独查找每个术语并将它们累积在结果数据框中。找到匹配的列后,检查每行中的匹配数,看是否与术语数匹配。
results = pd.DataFrame()
terms = [ 'Cl', '[Na+]' ]
for term in terms:
if results.empty:
results = df.isin( [ term ] )
else:
results |= df.isin( [ term ] )

results['count'] = results.sum(axis=1)
print( results[ results['count'] == len( terms ) ].index.tolist() )
我知道有更好的方法 - 但这种方法有效(我认为)
上面的代码产生 [1]terms = [ 'Cl', '[Na+]' ] [0,1]terms = [ "[OH-]","[Na+]" ] .

关于python - 使用 AND 或 OR 选项在多列中的数据框中进行多字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63094989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com