pandas loc 检查值是否包含多个单词或字符串中的任何一个
pandas loc to check if value contains any of several words or a string
我有一个 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 循环将掩码添加为布尔值列表?因为这个解决方案对我来说似乎很麻烦。
这是我的建议:
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 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 循环将掩码添加为布尔值列表?因为这个解决方案对我来说似乎很麻烦。
这是我的建议:
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()
函数,但如果您确定字符串始终以小写形式给出,则可以跳过它。