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

如何使用pandas df.query()筛选列中含指定列表值的DataFrame?

Pandas筛选包含指定列表值的DataFrame行(支持多条件)

先看你的原始数据:

import pandas as pd

my_df = pd.DataFrame({
    'col': ['c1', 'c2', 'c3'],
    'values': [[1,2,3], ['a','b','c'], [11,12,13]]
})

你之前的query写法存在嵌套调用、字符串格式错误的问题,导致无法正确匹配列表。下面给你几种可行的解决方法:

单条件筛选(匹配指定列表)

方法1:直接用布尔索引

Pandas支持直接对列表类型的列做相等比较,写法简单直观:

# 筛选values列等于['a','b','c']的行
result = my_df[my_df['values'] == ['a','b','c']]
print(result)

输出:

col       values
1   c2  [a, b, c]

方法2:正确使用query方法

如果偏好query语法,有两种可靠写法:

  • 传入外部变量(推荐,避免字符串转义问题):
target_list = ['a','b','c']
result = my_df.query("values == @target_list")
  • 直接在query中构造列表(注意引号嵌套逻辑):
result = my_df.query('values == ["a", "b", "c"]')

多条件筛选示例

如果需要组合多个筛选条件,比如结合列值匹配和列表匹配:

逻辑与(同时满足两个条件)

比如筛选col为c2且values等于目标列表:

# 布尔索引写法
result = my_df[(my_df['col'] == 'c2') & (my_df['values'] == ['a','b','c'])]

# query写法
result = my_df.query('col == "c2" and values == ["a", "b", "c"]')

逻辑或(满足任意一个列表匹配)

比如筛选values是[1,2,3]或['a','b','c']的行:

targets = [[1,2,3], ['a','b','c']]
# 布尔索引写法
result = my_df[my_df['values'].isin(targets)]

# query写法
result = my_df.query('values in @targets')

输出:

col       values
0   c1    [1, 2, 3]
1   c2  [a, b, c]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:55:12