Pandas当重复分组内另一列值超阈值时删除该分组所有行
问题需求
现有Pandas DataFrame,A列存在重复取值,每组重复A值对应的B列取值各不相同,需要实现:如果某组重复A值对应的B列中存在高于15的数值,则删除该A值对应的全部行。
原始数据样例
| A Column | B Column |
|---|---|
| 1 | 10 |
| 1 | 14 |
| 2 | 10 |
| 2 | 20 |
| 3 | 5 |
| 3 | 10 |
期望输出结果
| A Column | B Column |
|---|---|
| 1 | 10 |
| 1 | 14 |
| 3 | 5 |
| 3 | 10 |
实现方案
核心逻辑
按A列分组后,仅保留所有B列取值都不超过15的分组即可。
完整代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'A Column': [1, 1, 2, 2, 3, 3], 'B Column': [10, 14, 10, 20, 5, 10] }) # 方法1:使用groupby+filter直接筛选分组(可读性更高) df_result = df.groupby('A Column').filter(lambda group: (group['B Column'] <= 15).all()) # 方法2:使用transform生成布尔掩码过滤(性能更高,适合大数据量场景) mask = df.groupby('A Column')['B Column'].transform(lambda x: (x <= 15).all()) df_result = df[mask] print(df_result)
代码说明
groupby('A Column'):按A列的值对DataFrame进行分组,相同A值的行被分到同一组filter(lambda group: (group['B Column'] <= 15).all()):遍历每个分组,仅保留组内所有B列值都小于等于15的分组,不满足条件的分组整组删除- transform方法是先生成和原DataFrame行数一致的布尔掩码,符合条件的行标记为True,再通过掩码过滤得到结果,数据量大时比filter方法效率更高
内容的提问来源于stack exchange,提问作者AsianBeast
相关产品推荐
相关产品推荐

