如何在Python Pandas DataFrame中筛选包含所有指定子串的列值?
如何在Pandas DataFrame中保留包含指定列表所有子串的列值?
需求说明
筛选DataFrame中某一列(示例为value_1)同时包含指定列表所有子串的行,比如示例要求value_1必须同时包含'a'和'on'两个子串。
示例数据
import pandas as pd df = pd.DataFrame( [ [1, 'foollish', 'molish'], [2, 'barnylishon', 'chacha'], [3, 'bazon', 'gazon'], ], columns=['id', 'value_1', 'value_2']) search_list = ['a','on']
解决方案
方法1:apply结合all逐行检查
通过apply遍历目标列的每个字符串,检查是否包含所有子串,生成布尔掩码后筛选行:
# 生成布尔掩码:验证每个value_1元素是否包含search_list中所有子串 mask = df['value_1'].apply(lambda x: all(sub in x for sub in search_list)) # 筛选符合条件的行 df_result = df[mask] print(df_result)
方法2:正则正向预查匹配
构建包含所有子串的正则表达式(正向预查语法),通过str.contains批量匹配:
import re # 构建正则规则:自动转义子串中的特殊字符,生成多条件正向预查 pattern = ''.join([f'(?=.*{re.escape(sub)})' for sub in search_list]) # 匹配所有符合条件的行 mask = df['value_1'].str.contains(pattern, regex=True) df_result = df[mask] print(df_result)
运行结果
两种方法均会输出期望结果:
id value_1 value_2 1 2 barnylishon chacha 2 3 bazon gazon
内容的提问来源于stack exchange,提问作者Константин Прудников
相关产品推荐
相关产品推荐

