为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2023-05-23 15:26:28
我有一个搜索词列表和一个带有描述列的数据框。我想标记每一行的描述包含一个或多个列出的术语。我开始了以下但我不确定如何正确循环它:terms = ['x','y']dffor t in terms:    df['Test_Flag'] = np.where(df['Description'].str.contains(t, case=False, na=False), t, '')有什么想法吗?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以构建一个函数并使用应用。


def is_in_flag(val, lst):

    for item in lst:

        if (item in val):

            return 1

    return 0


terms = ['x','y']


df['Test_Flag'] = df['Description'].apply(is_in_flag ,args=[terms])


df

//img1.sycdn.imooc.com//646c6abc0001285a04240359.jpg

或者以你的方式:


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

//img1.sycdn.imooc.com//646c6ac90001999a04870286.jpg

查看完整回答
反对 回复 2023-05-23
?
忽然笑

TA贡献1806条经验 获得超5个赞

我建议使用申请:


import pandas

df = 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)


查看完整回答
反对 回复 2023-05-23
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

你可以使用正则表达式


pattern = '|'.join(['({s})'.format(s=s) for s in terms])

df['Flag'] = df.words.str.contains(pattern)


查看完整回答
反对 回复 2023-05-23
  • 3 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信