熊猫数据框之间的部分字符串匹配

我已经在这里这里和其他地方看到过关于部分字符串匹配合并的讨论,但是在包含超字符串而不是子字符串的表上如何进行合并却一无所获。

给定样本数据,例如

df1 = pd.DataFrame({'uri': ['http://www.foo.com/index', 
                            'https://bar.net/directory', 
                            'www.baz.gov/aboutus']})
df2 = pd.DataFrame({'fqdn': ['www.foo.com',
                             'www.qux.mil']})
print(df1)

                         uri
0   http://www.foo.com/index
1  https://bar.net/directory
2        www.baz.gov/aboutus
print(df2)

          fqdn
0  www.foo.com
1  www.qux.mil

我的最终目标是从中删除df1包含任何子字符串的行df2在实际数据中,df1有几百万行和df2几百个,并且任何给定的行在中df1最多具有一个子字符串df2

给定样本数据,我希望最终得到一个像

                         uri
0  https://bar.net/directory
1        www.baz.gov/aboutus

按照我的逻辑,中间步骤是生成

                         uri           fqdn
0   http://www.foo.com/index    www.foo.com
1  https://bar.net/directory         np.NaN
2        www.baz.gov/aboutus         np.NaN

但我不知道如何在中检查所有df2的值df1.apply()


编辑:

虽然以下两个答案都起作用,但通过编译正则表达式对象并使用,我在特定情况下获得了最快的结果extract

import re

fqdn_list= re.compile(f"({'|'.join(df2.fqdn)})")

df1['fqdn'] = df1.uri.str.extract(fqdn_list)
二凡

将字符串df2|与管道()作为分隔符连接起来,分隔or符是regex中运算符。这样,我们可以检查中是否df1包含这些字符串中的任何一个,并使用str.contains~哪个将其删除not

m = ~df1['uri'].str.contains('|'.join(df2['fqdn']))
df1[m]

输出量

                         uri
1  https://bar.net/directory
2        www.baz.gov/aboutus

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找两个熊猫数据框之间的部分字符串匹配的最快方法

通过部分字符串匹配创建新的熊猫数据框

使用基于部分字符串匹配的熊猫在python中过滤数据框

使用熊猫从数据框中删除部分字符串

替换熊猫数据框中的部分字符串

熊猫数据框部分字符串替换

识别熊猫数据框列与字符串匹配的位置

根据完全匹配的字符串过滤熊猫数据框

基于部分字符串匹配的子集数据框

数据帧之间的部分字符串匹配,不会覆盖现有数据

比较两个数据框列以匹配字符串或子字符串,然后以大熊猫计数

用正则表达式替换熊猫数据框中字符串的特定部分

如何在熊猫数据框列中提取字符串的各个部分

根据列表中的部分字符串过滤熊猫(python)数据框

按熊猫数据框列的相同部分字符串分组

从熊猫数据框列中获取字符串的前半部分

如何使用多个部分字符串过滤熊猫数据框?

根据条件替换熊猫数据框列中的部分整数或字符串

如何删除熊猫数据框中多列的部分字符串

熊猫apply():如何根据字符串匹配将选定的列相乘并返回完整的数据框

在熊猫中合并两个数据框时如何“模糊”匹配字符串

使用字符串搜索熊猫省略数据框中的其他匹配项

如何通过匹配熊猫数据框中的字符串来使用索引

熊猫:加入部分字符串匹配,例如Excel VLOOKUP

熊猫部分字符串匹配,包含的反向

如何删除部分匹配子字符串的熊猫行?

替换部分匹配字符串的pandas数据框中的列名

当部分字符串匹配时,如何基于字典替换整个数据框中的值?

如何合并/连接两个具有部分字符串匹配的列的数据框?