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

Python Pandas根据条件删除DataFrame指定部门下分类所有行咨询

Pandas按条件删除指定分组所有行的实现方法

你的需求核心是先定位所有存在Text值为JOHN的(部门、分类)组合,再删除原数据中属于这些组合的全部行即可,具体实现代码如下:


完整可运行代码

import pandas as pd

# 构造样例数据
data = {
    'department': [1,1,1,1,1,1,1,1,1,1,2,2,2],
    'Category': ['a7','a7','a7','a8','a8','a8','a8','a9','a9','a9','a8','a8','a5'],
    'Text': ['great school','Enjoy classes','Social studies','JOHN','RONIE','Amazing lecturer','walking to school','Effective tomorrow','marie kate','math','lissie','lovely','Ronie']
}
df = pd.DataFrame(data)

# 核心逻辑:第一步找出需要删除的(部门,分类)组合
drop_groups = df[df['Text'] == 'JOHN'][['department', 'Category']].drop_duplicates()

# 第二步:匹配过滤,保留不属于待删除组合的行
df_result = df.merge(drop_groups, on=['department', 'Category'], how='left', indicator=True)
df_result = df_result[df_result['_merge'] == 'left_only'].drop(columns='_merge')

# 输出结果
print(df_result)

逻辑说明

  • 第一步的drop_groups会拿到所有出现过JOHN的部门+分类配对,样例中得到的就是department=1, Category=a8这一组
  • 第二步用左连接给原数据打标记,_merge值为left_only的就是不属于待删除分组的行,过滤后就是你要的结果
  • 如果偏好更简洁的写法,也可以用groupby过滤实现,效果一致:
df_result = df.groupby(['department', 'Category']).filter(lambda x: (x['Text'] != 'JOHN').all())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:45:03