You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas的groupby筛选含EQ、AI且不含BO的NAME?

Pandas筛选符合条件的NAME分组数据

原始数据

首先,我们有如下的DataFrame:

import pandas as pd

df = pd.DataFrame({"NAME":["A", "A", "A" ,"A", 
                       "B", "B", "B", 
                       "C", "C", "C", "C",
                       "D", "D",],
               "CLASS":["LI","BO","EQ","AI",
                           "LI", "EQ", "AI", 
                           "LI","BO","EQ","AI",
                           "EQ", "AI", 
                          ]})

需求

筛选出**同时包含EQ和AI但不包含BO**的NAME对应的所有行。

实现方法

可以通过groupby结合filter函数实现,核心是对每个NAME分组进行条件校验:

方法一:自定义筛选函数

def validate_group(group):
    class_set = set(group['CLASS'])
    # 校验:同时包含EQ、AI,且不含BO
    return {'EQ', 'AI'}.issubset(class_set) and 'BO' not in class_set

# 应用筛选,返回符合条件的所有行
filtered_df = df.groupby('NAME').filter(validate_group)
print(filtered_df)

方法二:简洁的lambda表达式写法

如果追求代码简洁,也可以直接用lambda表达式替代自定义函数:

filtered_df = df.groupby('NAME').filter(
    lambda g: {'EQ', 'AI'}.issubset(g['CLASS']) and 'BO' not in g['CLASS']
)

输出结果

执行上述代码后,将得到符合要求的结果:

NAME CLASS
4    B    LI
5    B    EQ
6    B    AI
10   D    EQ
11   D    AI

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:27:13