如何使用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
相关产品推荐
相关产品推荐

