Pandas Loop 搜索词标记包含它们的行

我有一个搜索词列表和一个带有描述列的数据框。我想标记每一行的描述包含一个或多个列出的术语。我开始了以下但我不确定如何正确循环它:


terms = ['x','y']

df


for t in terms:

    df['Test_Flag'] = np.where(df['Description'].str.contains(t, case=False, na=False), t, '')

有什么想法吗?


哔哔one
浏览 121回答 3
3回答

富国沪深

您可以构建一个函数并使用应用。def is_in_flag(val, lst):    for item in lst:        if (item in val):            return 1    return 0terms = ['x','y']df['Test_Flag'] = df['Description'].apply(is_in_flag ,args=[terms])df或者以你的方式:terms = ['x','y']df['Test_Flag'] = 0 for t in terms:    df['Test_Flag']=(( df['Test_Flag'] + df.Description.str.contains(t))>0)*1 df

忽然笑

我建议使用申请:import pandasdf = pd.DataFrame({'words':['joy','heX','socks','brain','zebra','sexy']})ts = ['x','y','z']df['flag'] = df.words.apply(lambda x: sum(t in x.lower() for t in ts) > 0)

陪伴而非守候

你可以使用正则表达式pattern = '|'.join(['({s})'.format(s=s) for s in terms])df['Flag'] = df.words.str.contains(pattern)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python