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

如何基于列值组合条件筛选DataFrame行?Python高效实现方案

基于列值条件筛选DataFrame行的方法及最优实现

通用筛选方法(问题1解答)

针对基于列值条件筛选DataFrame行的需求,常用高效方法如下:

  • 布尔索引:直接通过列条件生成布尔数组筛选目标行,语法直观:
    filtered_df = df[df['列名'] == 目标值]
    
  • query()方法:用字符串表达式编写筛选条件,适合复杂多场景,可读性更强:
    filtered_df = df.query('列名 == 目标值')
    
  • isin()方法:快速匹配列值属于指定集合的行:
    filtered_df = df[df['列名'].isin([值1, 值2, 值3])]
    

特定对应关系的最优筛选方案(问题2解答)

针对你需要保留Type与Set固定对应关系(A→1、B→2、C→3、D→4、E→5、F→6)的场景,无需繁琐的drop操作,推荐两种正向筛选方案:

方法1:字典映射+布尔索引

先定义对应关系字典,通过映射后的值与Set列对比,直接筛选匹配行:

import pandas as pd

# 构造原始数据
data = {
    'Type': ['A', 'B', 'B', 'C', 'D', 'A', 'F', 'F', 'E', 'D', 'E', 'C'],
    'Set': [1, 2, 3, 4, 5, 2, 3, 2, 1, 5, 5, 6]
}
df = pd.DataFrame(data, index=range(1,13))

# 定义Type与Set的对应关系
type_set_map = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6}

# 筛选符合对应关系的行
filtered_df = df[df['Set'] == df['Type'].map(type_set_map)]
print(filtered_df)

执行结果:

Type  Set
1      A    1
2      B    2
11     E    5

方法2:内连接筛选

将对应关系转换为DataFrame,通过内连接merge自动保留匹配行,适合映射关系需复用的场景:

import pandas as pd

# 构造原始数据(同上)
data = {
    'Type': ['A', 'B', 'B', 'C', 'D', 'A', 'F', 'F', 'E', 'D', 'E', 'C'],
    'Set': [1, 2, 3, 4, 5, 2, 3, 2, 1, 5, 5, 6]
}
df = pd.DataFrame(data, index=range(1,13))

# 构造映射关系DataFrame
map_df = pd.DataFrame.from_dict(
    {'A':1, 'B':2, 'C':3, 'D':4, 'E':5, 'F':6},
    orient='index',
    columns=['Set']
).reset_index().rename(columns={'index':'Type'})

# 内连接筛选匹配行
filtered_df = df.merge(map_df, on=['Type', 'Set'], how='inner')

此方法结果与方法1完全一致。

方案优势

这两种方法均为正向筛选,无需标记删除行,代码更简洁、可读性更高,大数据量下执行效率远高于多次调用drop的繁琐操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:55:17