首页 > 解决方案 > 如何在熊猫列中保存 str.contains() 的总和?

问题描述

我想保存在我的 csv_file['dialog'] 列中找到 Twilight/Sparkle/Twilight Sparkle 的次数,因为 csv_file['pony_sort'] 中的相应单元格不是暮光之城。我知道这是无效的语法,但是是否有可能以这种方式获得我想要的东西,如果是,我可以改变什么?谢谢!

更新:

example of data: 
pony_sort | dialog | 
--------------------
twilight  | "....twilight"
applejack | "twilight, twilight, twilight!"

在上面这个例子中,第一行不会算“暮光之城”,因为 pony_sort = twilight. 第二行的 count = 3 因为在 pony_sort 列中没有提到暮光,而暮光被提到了三次。

twilight_mentions = csv_file[csv_file['dialog'].str.contains("Twilight|Sparkle|Twilight Sparkle").sum() for i in csv_file[pony_sort] != "twilight"]

标签: pythonpandasdataframeseries

解决方案


记住series.str.contains每行计数一次,不管它包含多少搜索词。你正在寻找的是series.str.count

from re import IGNORECASE
twilight_mentions = (
    csv_file[csv_file['pony_sort'].ne('twilight')]['dialog']
    .str.count('twilight sparkle|twilight|sparkle', flags=IGNORECASE)
    .sum()
)

输出

3

re如果不需要,可以跳过该标志。

请注意可选模式的顺序,如果您使用示例模式,'twilight|sparkle|twilight sparkle'则包含的'twilight, twilight sparkle'行将返回 3 而不是 2。但是,模式会在遇到 时'twilight sparkle|twilight|sparkle'尝试查找第一个选项。我不知道确切的正则表达式实现,但是需要注意。twilight sparkletwil...


推荐阅读