Python 熊猫:在某些列的字符串中查找子字符串
我有一个2数据框,在第一列中,我应该在那里找到一些信息 第二列,我应该在第一个dataframe和列中找到什么,若第一列中的字符串包含什么,我应该添加什么 df1: df2: 若url列匹配,我将使用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
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'