我有一个包含2列的数据框。一个是URL,另一个是用户名。
+----------------------------------------+---------------+
| URL | Username |
+----------------------------------------+---------------+
| johnsmith/stackoverflow.com/?=abc | johnsmith |
| michealrod/stackoverflow.com/?=payment | michealrod |
| stephaniejean/stackoverflow.com/?=abc | stephaniejean |
+----------------------------------------+---------------+
我想编写一个lambda函数来检查用户名是否存在于URL中。我正在尝试编写类似的内容,但出现错误
df['exists'] = df.apply(lambda x : df['Username'] in df['URL']).any()
因此,基本上,如果用户名是URL的一部分,我尝试获取TRUE,如果URL中不存在用户名,则为False。
答案 0 :(得分:2)
假设您的数据是干净的,则列表理解相对有效:
df['exists'] = [x in y for x, y in zip(df['Username'], df['URL'])]
您可以使用apply
,但性能较差:
df['exists'] = df.apply(lambda row: row['Username'] in row['URL'], axis=1)
答案 1 :(得分:1)
使用numpy
core.defchararray.find
df['exists']=np.core.defchararray.find(df.URL.values.astype(str),df.Username.values)!=-1