如何基于两列值筛选保留Python DataFrame的目标行
pandas 分组筛选解决方案
核心思路
按Column A和Column C的组合分组,判断每个分组中是否存在Column B = 124的行,保留所有符合该条件的分组的全部行。
代码实现
1. 构造示例数据
import pandas as pd import numpy as np # 构造目标DataFrame df = pd.DataFrame({ 'Column A': [7,7,7,8,8,8,9,9,9,7,7,7], 'Column B': [124, np.nan, np.nan, np.nan, np.nan, np.nan, 124, np.nan, np.nan, 124, np.nan, np.nan], 'Column C': [1,1,1,1,1,1,1,1,1,2,2,2] })
2. 分组筛选
使用transform方法直接生成每行对应的分组判断结果,一步完成筛选:
# 生成布尔掩码:标记每行所在分组是否包含Column B=124的行 mask = df.groupby(['Column A', 'Column C'])['Column B'].transform(lambda x: (x == 124).any()) # 筛选出符合条件的所有行 result_df = df[mask] # 输出结果 print(result_df)
输出结果
| Column A | Column B | Column C | |
|---|---|---|---|
| 0 | 7 | 124.0 | 1 |
| 1 | 7 | NaN | 1 |
| 2 | 7 | NaN | 1 |
| 6 | 9 | 124.0 | 1 |
| 7 | 9 | NaN | 1 |
| 8 | 9 | NaN | 1 |
| 9 | 7 | 124.0 | 2 |
| 10 | 7 | NaN | 2 |
| 11 | 7 | NaN | 2 |
代码解释
groupby(['Column A', 'Column C']):将数据按A和C的组合分组,确保同组行的A、C值完全一致transform(lambda x: (x == 124).any()):对每个分组的B列进行判断,只要有一行等于124,整个组的所有行都会标记为Truedf[mask]:通过布尔掩码筛选出所有标记为True的行,即保留包含124的分组的全部数据
内容的提问来源于stack exchange,提问作者jsang
相关产品推荐
相关产品推荐

