Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:在某些列的字符串中查找子字符串_Python_Pandas - Fatal编程技术网

Python 熊猫:在某些列的字符串中查找子字符串

Python 熊猫:在某些列的字符串中查找子字符串,python,pandas,Python,Pandas,我有一个2数据框,在第一列中,我应该在那里找到一些信息 第二列,我应该在第一个dataframe和列中找到什么,若第一列中的字符串包含什么,我应该添加什么 df1: df2: 若url列匹配,我将使用 df1['Main Category'] = df1.url.map(df2.set_index('url')['Maincategory']) 但找到子字符串是行不通的。 我用这个 mapping = dict(df2.set_index('url')['Maincategory']) def

我有一个2数据框,在第一列中,我应该在那里找到一些信息 第二列,我应该在第一个dataframe和列中找到什么,若第一列中的字符串包含什么,我应该添加什么

df1:

df2:

若url列匹配,我将使用

df1['Main Category'] = df1.url.map(df2.set_index('url')['Maincategory'])
但找到子字符串是行不通的。 我用这个

mapping = dict(df2.set_index('url')['Maincategory'])
def map_to_substring(x):
    for key in mapping.keys():
        if key in x:
            return mapping[key]
    return 'None'
但如果df太大,则需要太多时间。
如何改进此方法以更快地完成任务?

不清楚您的要求,但您应该使用pandas
str.contains
方法


一般来说,您可以循环第一个数据帧中的每一列,并在第二个数据帧中搜索匹配项。我认为没有比这更快的解决方案了

如果您要与域名匹配,那么使用
urlparse
向数据帧添加一列是值得的。您可以在
netloc
上进行精确匹配。当然,这对任意子字符串不起作用,但在您的情况下可能会起作用。参考:@Mikk不总是域注:有一种解决方案比使用
pd.Series.str.contains
更有效。如果性能是一个问题,那么这可能值得调查。
df1['Main Category'] = df1.url.map(df2.set_index('url')['Maincategory'])
mapping = dict(df2.set_index('url')['Maincategory'])
def map_to_substring(x):
    for key in mapping.keys():
        if key in x:
            return mapping[key]
    return 'None'