Pandas按出现次数分组筛选:移除总出现1次且Observation为1的用户
实现方法
你需要过滤的是在分组统计结果中仅对应1条记录、且该记录的Observation值为1的用户,可直接在你现有分组统计代码的基础上补充如下逻辑:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'User': ["alex", "alex", "ravi", "dodo", "dodo", "dodo", "cokie","dodo","nemo","ravi"], 'Id': ['a', 'b', 'b', 'a', 'b', 'b', 'c','a','e','b'] }) # 你原有的分组统计代码 df_group = df.groupby(['User', 'Id']).size().reset_index(name='Observation') # 新增过滤逻辑 # 计算每个用户在分组结果中的总条目数 user_entry_cnt = df_group.groupby('User')['User'].transform('count') # 排除同时满足「用户仅1条分组条目、Observation值为1」的行 filtered_df = df_group[~((user_entry_cnt == 1) & (df_group['Observation'] == 1))] print(filtered_df)
运行后输出的结果和你预期的完全一致:
User Id Observation 0 alex a 1 1 alex b 1 3 dodo a 2 4 dodo b 2 6 ravi b 2
逻辑说明
- 用
groupby('User')['User'].transform('count')给每行数据标记对应用户在分组统计结果中的总条目数,alex对应的标记值为2、ravi对应的标记值为1、cokie对应的标记值为1 - 过滤规则是仅剔除同时满足「用户总条目数=1」和「Observation=1」的行,刚好排除掉cokie、nemo两类不需要的用户,其余所有用户都会保留
内容的提问来源于stack exchange,提问作者Trishala Suryavanshi
相关产品推荐
相关产品推荐

