【问题标题】:Search in column a list of word and create a boolean column if a word is found [duplicate]在列中搜索单词列表并在找到单​​词时创建一个布尔列[重复]
【发布时间】:2020-01-13 09:21:44
【问题描述】:

您好,问题是通过搜索单词列表来循环遍历列,然后如果找到搜索到的任何列表单词,则创建一个布尔列。 这是我的代码

# 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 列时,我发现只有 2 个 True,但实际上不止两个。我的代码有什么问题? 谢谢

【问题讨论】:

标签: python pandas boolean


【解决方案1】:

您的问题是您将df_codeNaf['topNAF'] 更改为code 中的每个banch。您的代码可以通过以下方式修复:

df_codeNaf['topNAF'] = False
for branch in code:
    df_codeNaf['topNAF'] = df_codeNaf['topNAF'] | df_codeNaf['Code_NAF'].str.contains(branch).

但更好的是,您可以在一行中尝试regexcontains

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

【讨论】:

  • 您好,这也导致 2 (True) 作为我的代码结果。
【解决方案2】:

这里是使用 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)

【讨论】:

  • apply 速度慢而且效率低 - 因为str.contains 可以做同样的工作,所以更推荐它。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多