Python 在列中搜索单词列表,如果找到单词,则创建布尔列

Python 在列中搜索单词列表,如果找到单词,则创建布尔列,python,pandas,boolean,Python,Pandas,Boolean,Hello问题通过搜索单词列表在列上循环,然后如果找到任何搜索的单词列表,则创建一个布尔列。 这是我的密码 # Code naf related to sport. code = ["3230Z","4764Z","7721Z","8551Z","9311Z", "9312Z", "9313Z", "9319Z", "9329Z", "364Z" "524W", "714B", "804C", "926A", "926C", "930L", "927C", "92

Hello问题通过搜索单词列表在列上循环,然后如果找到任何搜索的单词列表,则创建一个布尔列。 这是我的密码

# Code naf related to sport.
code = ["3230Z","4764Z","7721Z","8551Z","9311Z", "9312Z", "9313Z", "9319Z",
        "9329Z", "364Z" "524W", "714B", "804C", "926A", "926C", "930L", "927C",
        "923K"]

# check keywords of code into "Code_Naf" column
for branch in code:
    df_codeNaf["topNAF"] = df_codeNaf["Code_NAF"].str.contains("3230Z" or "4764Z" or "7721Z" or "8551Z"
                                                                      or "9311Z" or "9312Z" or "9313Z" or "9319Z"
                                                                      or "9329Z" or "364Z" "524W" or "714B" or
                                                                      "804C" or "926A" or "926C" or "930L" or
                                                                      "927C" or "923K")

当我查看topNaf专栏时,我发现只有两个是正确的,但实际上不止两个。我的代码怎么了?
谢谢

你的问题是你在
code
中的每一个
banch
都改变了
df\u codeNaf['topNAF']
。您可以通过以下方式修复代码:

df_codeNaf['topNAF'] = False
for branch in code:
    df_codeNaf['topNAF'] = df_codeNaf['topNAF'] | df_codeNaf['Code_NAF'].str.contains(branch).
但更好的是,您可以在一行中使用
包含
尝试
正则表达式

pattern = '|'.join(code)
df_codeNaf['topNAF'] = df_codeNaf['Code_NAF'].str.contains(pattern)

这里有一个使用lambda的方法

code = ["3230Z","4764Z","7721Z","8551Z","9311Z", "9312Z", "9313Z", "9319Z",
        "9329Z", "364Z" "524W", "714B", "804C", "926A", "926C", "930L", "927C",
        "923K"]

df_codeNaf["topNAF"] = df_codeNaf["Code_NAF"].apply(lambda x: True if x in code else False)

“xxx”或“yyy”
没有达到您认为的效果。首先,我建议您删除巨大的“contains”。应该存在另一种方法来检查是否在列表中…进一步阅读:
apply
速度慢且效率低-因为
str.contains
可以做同样的工作,所以建议使用它。您好,这也导致我的代码结果为2(True)。