如何简洁地从Pandas DataFrame提取行并移除原行?
简洁提取并移除DataFrame中符合条件的行
需求说明
需要实现两个关联操作:
- 根据值条件提取目标行
- 从原DataFrame中移除该行,替代原示例中重复编写布尔索引的冗余写法
原实现与数据示例
原代码:
import pandas as pd data = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'z', 3: 'd'}, 'B': {0: 1, 1: 3, 2: 5, 3: 7}, 'C': {0: 2, 1: 4, 2: 6, 3: 8}}) # 原冗余写法 data_z = data[data.A.isin(['z']) == True] data = data[data.A.isin(['z']) == False]
输入DataFrame:
A B C 0 a 1 2 1 b 3 4 2 z 5 6 3 d 7 8
期望输出:
处理后的原DataFrame:
A B C 0 a 1 2 1 b 3 4 3 d 7 8
提取的目标行:
A B C 2 z 5 6
简洁实现方法
方法1:预定义布尔掩码(推荐)
先定义一次条件掩码,避免重复计算条件,代码更高效简洁:
# 单值判断直接用==,比isin更简洁 mask = data['A'] == 'z' data_z = data[mask] data = data[~mask]
方法2:使用query方法提升可读性
用类SQL的语法编写条件,代码更直观:
data_z = data.query('A == "z"') data = data.query('A != "z"')
方法3:结合索引与drop操作
如果确定符合条件的行唯一,可通过索引一次性完成移除和提取:
target_idx = data[data['A'] == 'z'].index data_z = data.loc[target_idx] data = data.drop(target_idx)
内容的提问来源于stack exchange,提问作者Cairoknox
相关产品推荐
相关产品推荐

