如何基于可变列表迭代过滤Pandas DataFrame行?
Pandas 根据可变列表过滤DataFrame的正确方法
首先纠正一个逻辑误区:你写的df[(df.task_id = 1) & (df.task_id = 5) & (df.task_id = 7)]是错误的——单个task_id不可能同时等于多个不同值,你实际需要的是筛选task_id属于目标列表的行(逻辑「或」的关系)。
针对可变长度的task_ids列表(不管长度是1还是13),用Pandas的isin()方法是最简洁高效的解决方案:
# 核心代码,直接适配任意长度的task_ids filtered_df = df[df['task_id'].isin(task_ids)]
示例验证
当task_ids = [1,5,7]时,这段代码会自动筛选出所有task_id为1、5或7的行,完全符合你的需求。
额外说明
如果你的真实需求是筛选包含所有指定task_id的分组(比如按用户ID分组,每个用户必须有1、5、7这三个任务记录),那需要先分组再校验:
# 按user_id分组,筛选出包含所有task_ids的组 filtered_groups = df.groupby('user_id').filter(lambda x: set(task_ids).issubset(x['task_id'].unique()))
但根据你的描述,前者的单行列值匹配场景应该是你要的。
内容的提问来源于stack exchange,提问作者skidjoe
相关产品推荐
相关产品推荐

