如何检查pandas DataFrame每一行是否包含指定集合的所有值
确认pandas DataFrame每行包含指定值的惯用写法
推荐使用pandas向量化操作实现,比原有的apply遍历写法性能更高、可读性更好,核心逻辑是逐个检查每个目标值是否在对应行存在,再汇总判断:
通用实现代码
import pandas as pd def check_all_rows_contain_values(df: pd.DataFrame, target_values: list) -> bool: # 为每个目标值生成标记列,记录每行是否包含该目标值 value_exist_mask = pd.DataFrame({ val: (df == val).any(axis=1) for val in target_values }) # 先判断单行间所有目标值都存在,再判断所有行都满足条件 return value_exist_mask.all(axis=1).all()
测试验证
对你给出的示例可以直接调用验证:
VALUES = [1, 2] df_no = pd.DataFrame( { "a": [1], "b": [1], } ) df_yes = pd.DataFrame( { "a": [1], "b": [2], "c": [3], } ) print(check_all_rows_contain_values(df_no, VALUES)) # 输出False print(check_all_rows_contain_values(df_yes, VALUES)) # 输出True
方案优势
- 全程使用pandas向量化运算,无行级遍历,数据量越大性能优势越明显
- 逻辑分层清晰,每一步的作用容易理解,可拓展性强:如果需要筛选出符合要求的行,只要取
value_exist_mask.all(axis=1)作为过滤条件即可。
内容的提问来源于stack exchange,提问作者baxx
相关产品推荐
相关产品推荐

