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

多条件过滤Pandas DataFrame:保留含指定列表单个元素的行

Pandas DataFrame过滤:仅保留含目标列表单个元素的行

问题背景

现有Pandas DataFrame,需过滤掉两类行:

  1. 未包含目标列表中任何元素的行
  2. 包含目标列表中多个元素的行
    仅保留恰好包含目标列表一个元素的行

修正后的DataFrame与目标列表

先修正原代码的语法错误,构造可用的数据结构:

import pandas as pd

df = pd.DataFrame({
    'Name': ['John', 'Mark', 'Kevin', 'Ron', 'Amira'],
    'ID': [110, 111, 112, 113, 114],
    'Job title': ['xox','xoy','xoz','yow','uyt'],
    'Manager': ['River', 'Trevor', 'John', 'Lydia', 'Connor'],
    'M2': ['Shaun', 'Mary', 'Ronald', 'Cary', 'Miranda'],
    'M3': ['Clavis', 'Sharon', 'Randall', 'Mark', 'Doug'],
    'M4': ['Pat', 'Karen', 'Brad', 'Chad', 'Anita'],
    'M5': ['Ty', 'Jared', 'Bill', 'William', 'Bob'],
    'Location': ['US', 'US', 'JP', 'CN', 'JA']
})

target_list = ['River', 'Pat', 'Brad', 'William', 'Clogah']

过滤实现代码

通过统计每行匹配目标列表的元素数量,筛选出数量为1的行:

# 计算每行中属于目标列表的元素个数
match_count = df.isin(target_list).sum(axis=1)

# 筛选仅含1个目标元素的行
filtered_df = df[match_count == 1]

过滤结果

执行后得到的filtered_df为:

Name   ID Job title Manager      M2      M3    M4     M5 Location
2  Kevin  112       xoz    John  Ronald  Randall  Brad   Bill       JP
3    Ron  113       yow   Lydia    Cary     Mark  Chad  William       CN

代码说明

  • df.isin(target_list):生成布尔矩阵,标记每个元素是否属于目标列表
  • .sum(axis=1):按行求和,得到每行匹配目标元素的总个数
  • df[match_count == 1]:通过布尔索引,仅保留恰好匹配1个目标元素的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:27:28