如何按条件从数据框移除行:根据孔位通道数过滤记录
Pandas 按孔位通道数条件过滤行方案
直接用pandas处理即可,逻辑简单且运行效率高,不需要写循环逐行判断。
- 核心处理逻辑:
- 按
Well列分组,统计每个孔位下不重复的Channel总数量,把统计值匹配回原表的每一行 - 过滤掉符合两类规则的行:孔位共2个通道且当前行Channel值为2、孔位共3个通道且当前行Channel值为3
- 删除过程中临时添加的统计列,得到最终结果
- 按
可直接运行的代码如下:
import pandas as pd # 此处为示例数据构造,实际使用时替换为你自己读入的数据表即可 df = pd.DataFrame({ 'X': [123]*10, 'Y': [123]*10, 'Channel': [1,2,1,2,1,2,3,1,2,3], 'Well': ['B3','B3','B4','B4','B5','B5','B5','B6','B6','B6'] }) # 给每一行匹配对应孔位的通道总数 df['channel_cnt'] = df.groupby('Well')['Channel'].transform('nunique') # 按规则执行过滤 result = df[ ~( ((df['channel_cnt'] == 2) & (df['Channel'] == 2)) | ((df['channel_cnt'] == 3) & (df['Channel'] == 3)) ) ].drop(columns='channel_cnt')
运行后得到的过滤结果完全匹配需求:
| X | Y | Channel | Well |
|---|---|---|---|
| 123 | 123 | 1 | B3 |
| 123 | 123 | 1 | B4 |
| 123 | 123 | 1 | B5 |
| 123 | 123 | 2 | B5 |
| 123 | 123 | 1 | B6 |
| 123 | 123 | 2 | B6 |
注:如果后续存在其他通道数的孔位(比如4通道),当前逻辑不会改动这些孔位的行,有额外过滤规则直接在过滤条件里追加即可。
内容的提问来源于stack exchange,提问作者Meifong
相关产品推荐
相关产品推荐

