如何在pandas GroupBy分组数据上使用isin()函数实现过滤
报错原因
groupby操作返回的是SeriesGroupBy分组容器对象,没有isin方法,isin是普通Series/DataFrame的专属方法,所以直接对分组对象调用该方法会触发属性不存在报错。
实现代码
你可以通过groupby.apply对每个分组单独执行过滤逻辑,满足需求的代码如下:
# 按AttributeName分组后对每个组单独执行过滤 filtered_df = sample_data.groupby('AttributeName', group_keys=False).apply( lambda x: x[~x['From Country'].isin(x['ToCountry'].unique())].drop_duplicates(subset='From Country') ) print(filtered_df)
代码说明
group_keys=False:避免分组键被额外添加为索引,输出格式和原始表结构一致- 先调用
x['ToCountry'].unique()取当前组ToCountry的唯一值,既提高判断效率也避免重复值干扰 drop_duplicates(subset='From Country')保证同组内每个符合条件的From Country只保留对应的唯一一行,符合你的需求- 最终输出结果正好符合你的要求:John组仅保留西班牙入境苏格兰的第一行,Sally组仅保留From Country为苏格兰的行
内容的提问来源于stack exchange,提问作者alex_stephenson
相关产品推荐
相关产品推荐

