如何基于另一列的条件删除DataFrame中的指定分组?
筛选存在C列值大于3的B列分组
要实现删除所有C列值均小于3的B列分组,仅保留存在C列值大于3的分组,可以用以下两种简洁的方法:
方法一:使用groupby.filter(推荐)
直接对分组应用筛选逻辑,保留符合条件的分组所有记录:
df_clean = df.groupby('B').filter(lambda group: (group['C'] > 3).any())
逻辑说明:
groupby('B')按B列完成分组filter函数遍历每个分组,通过(group['C'] > 3).any()判断该分组中是否至少有一个C值大于3- 最终返回所有满足条件的分组的完整数据
方法二:先提取有效B值再筛选
如果需要单独获取有效分组的B值,再对原数据进行筛选:
# 获取所有存在C>3的B值 valid_groups = df.groupby('B').filter(lambda g: (g['C'] > 3).any())['B'].unique() # 筛选原DataFrame中属于有效分组的记录 df_clean = df[df['B'].isin(valid_groups)]
对您伪代码的补充说明:
您最初写的df.groupby('B')['C'] < 3.0仅能生成每个元素的布尔判断结果,无法完成分组级别的筛选,需要借助filter或先提取有效分组的方式实现需求。
内容的提问来源于stack exchange,提问作者Lazarus
相关产品推荐
相关产品推荐

