pandas loc检查value是否包含几个单词或字符串中的任何一个



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

(我以检查字符串是否在pandas数据框架中的示例)

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循环添加掩码作为布尔值列表?因为这个解决方案对我来说似乎很麻烦。

这是我的建议:

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

我正在添加lower()函数到my_str,但如果你确定字符串总是以小写字母给出,你可以跳过它。

相关内容

最新更新