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

如何筛选保留包含指定Fruit的ID对应的所有DataFrame行

筛选包含指定记录的ID的所有行

给定包含ID和Fruit列的长格式DataFrame(ID和Fruit均可能重复),需求为:保留所有至少存在一条Apple记录的ID的全部行,删除无Apple记录的ID的所有行。

示例数据

先构造符合场景的示例DataFrame:

import pandas as pd

data = {
    'ID': [1,1,1,1,1,2,2,2,2,2,3,3],
    'Fruit': ['Apple','Apple','Apple','Orange','Orange','Orange','Orange','Orange','Orange','Orange','Apple','Banana']
}
df = pd.DataFrame(data)

示例中ID1包含Apple和Orange记录,ID2全为Orange,ID3包含Apple和Banana,最终需保留ID1、ID3的所有行。

解决方法

方法1:使用groupby+transform广播判断结果

通过分组后对每个ID组判断是否存在Apple,再将结果广播到每行实现过滤:

# 生成每行对应的ID是否包含Apple的布尔值
has_apple = df.groupby('ID')['Fruit'].transform(lambda x: (x == 'Apple').any())
# 过滤得到目标DataFrame
filtered_df = df[has_apple]

方法2:先提取有效ID再筛选

先获取所有包含Apple记录的ID集合,再用isin过滤这些ID的所有行:

# 提取所有存在Apple记录的ID
valid_ids = df[df['Fruit'] == 'Apple']['ID'].unique()
# 保留有效ID的全部行
filtered_df = df[df['ID'].isin(valid_ids)]

两种方法均可实现需求:方法1无需额外存储ID集合,直接基于原DataFrame处理;方法2若需复用有效ID列表则更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:31:01