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
相关产品推荐
相关产品推荐

