如何在熊猫列中保存str.contains()的总和?

时间:2020-10-04 15:20:01

标签: python pandas dataframe series

我想保存在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,第一行将不算“ twilight”。第二行的计数为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"]

1 个答案:

答案 0 :(得分:1)

请紧记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 sparkle时找到第一个选项twil...。我不知道确切的正则表达式实现,但这是要注意的事情。