如何在Pandas中筛选update列不含torch2的id与name
解决方法
要实现这个需求,核心是排除所有曾出现过update='torch2'的id对应的所有记录——不是仅过滤update≠'torch2'的行(因为andre和Manuela的id关联过torch2,即便有其他update也需要完全排除)。
以下是两种Pandas实现方式:
方法一:先标记"问题id"再筛选
- 先提取所有出现过
torch2的id集合:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'id': [1,2,3,1,3], 'name': ['andre', 'paulo', 'Manuela', 'andre', 'Manuela'], 'update': ['torch2', 'stock_opt', 'length', 'stock', 'torch2'] }) # 获取所有关联过torch2的id bad_ids = df[df['update'] == 'torch2']['id'].unique()
- 筛选
id不在上述集合中的记录:
result = df[~df['id'].isin(bad_ids)]
方法二:用分组+变换直接筛选
通过groupby按id分组,用transform检查每组是否包含torch2,再反向筛选:
result = df[~df.groupby('id')['update'].transform(lambda x: (x == 'torch2').any())]
两种方法最终输出的result都符合期望:
id name update 2 paulo stock_opt
内容的提问来源于stack exchange,提问作者math_guy_shy
相关产品推荐
相关产品推荐

