如何筛选同时包含car和house的DataFrame行数据
筛选同时拥有'car'和'house'的人员行数据
要实现这个需求,核心是先确认哪些人员同时拥有'car'和'house'这两个var1取值,再用这些人员的名字去过滤原DataFrame。直接按var1的单个条件筛选会误留不符合要求的行,所以必须先通过分组验证人员的完整取值集合。
方法一:先筛选有效姓名,再过滤数据
import pandas as pd # 假设你的DataFrame名为df # 1. 分组获取每个name对应的var1集合,筛选出同时包含car和house的name valid_names = ( df.groupby('name')['var1'] .agg(set) .filter(lambda x: {'car', 'house'}.issubset(x)) .index.tolist() ) # 2. 用有效姓名过滤原DataFrame result_df = df[df['name'].isin(valid_names)]
方法二:用transform直接标记符合条件的行(更简洁)
# 给每行标记所属name是否同时拥有car和house df['valid'] = df.groupby('name')['var1'].transform(lambda x: {'car', 'house'}.issubset(x)) # 筛选有效行并删除辅助列 result_df = df[df['valid']].drop('valid', axis=1)
运行后,result_df会只保留Jay和Ashley的所有行,完全符合你的需求。这种方法对1000条数据的处理效率也很高,不会有性能问题。
内容的提问来源于stack exchange,提问作者kluster
相关产品推荐
相关产品推荐

