pandas loc 检查值是不是包含多个单词或字符串中的任何一个

Posted

技术标签:

【中文标题】pandas loc 检查值是不是包含多个单词或字符串中的任何一个【英文标题】:pandas loc to check if value contains any of several words or a stringpandas loc 检查值是否包含多个单词或字符串中的任何一个 【发布时间】:2021-12-11 02:48:10 【问题描述】:

我有一个带有包含字符串的列的 pandas DataFrame。

(我以Check if string is in a pandas dataframe为例)

import pandas as pd

BabyDataSet = [
    ('Bob and martin and Andrew', 968),
    ('Jessica and julia and anthony', 155),
    ('Mary and john', 77),
    ('John', 578),
    ('Mel and diana', 973),
    ('martin bob diana and Andrew', 968)
]

a = pd.DataFrame(data=BabyDataSet, columns=['Names', 'Births'])
                           Names  Births
0      Bob and martin and Andrew     968
1  Jessica and julia and anthony     155
2                  Mary and john      77
3                           John     578
4                  Mel and diana     973
5    martin bob diana and Andrew     968

给定一个像“martin andrew bob”这样的字符串,我想过滤DataFrame以获取包含名称中所有单词(以任何顺序和大小写)的行的子集。

有没有更好的方法来使用 for 循环将掩码添加为布尔值列表?因为这个解决方案对我来说似乎很麻烦。

【问题讨论】:

【参考方案1】:

这是我的建议:

my_str = 'martin andrew bob'

a[a['Names'].str.lower()
            .str.split()
            .apply(set(my_str.lower().split()).issubset)
 ].reset_index(drop=True)

输出:

                          Names  Births
0     Bob and martin and Andrew     968
1   martin bob diana and Andrew     968

我正在向 my_str 添加 lower() 函数,但如果您确定该字符串始终以小写形式给出,您可以跳过它。

【讨论】:

以上是关于pandas loc 检查值是不是包含多个单词或字符串中的任何一个的主要内容,如果未能解决你的问题,请参考以下文章

Pandas str 替换删除整个值而不是替换

查看 div 是不是包含一个或多个输入的单词(Javascript)

Pandas Dataframe 使用正则表达式检查值是不是存在

检查列表是不是包含多个值android

检查多个ORM关系的字段是不是包含值

pandas使用nan值更新特定行