Python中如何筛选DataFrame里Boolean变量为True的行?
问题:筛选DataFrame中Boolean列值为True的行
给定的Given_DF如下:
ID A B 0 123 True 1 456 False 2 789 False 3 132 True 4 465 False
期望得到仅包含ID为0和3的两行DataFrame。
尝试了两种方法但未成功:
- 将B列作为筛选条件:
Desired = Given_DF["B"].isin(True)
- 对变量B建立索引并使用loc筛选True的记录:
prep.sort_index(level=["B"]) Desired = prep.loc["True"]
可行的解决方法
方法1:直接布尔索引
利用B列本身的布尔值直接筛选,这是最简洁高效的方式:
Desired = Given_DF[Given_DF["B"]]
方法2:使用loc筛选
loc支持布尔索引,语义更清晰,适合需要同时筛选行和列的场景:
Desired = Given_DF.loc[Given_DF["B"]]
方法3:使用query方法
如果习惯类SQL的语法,可以用query:
# 两种写法都可行 Desired = Given_DF.query("B == True") Desired = Given_DF.query("B")
之前方法失败的原因
- 第一种方法中,
isin()需要传入可迭代对象(比如列表[True]),而非单个值True,正确写法为Given_DF[Given_DF["B"].isin([True])],但没必要用isin,直接布尔索引更简单。 - 第二种方法中,你未将B列设置为索引(仅做了排序),且用字符串
"True"匹配布尔值True,类型不匹配导致失败。若要通过索引筛选,需先设置索引:
prep = Given_DF.set_index("B") Desired = prep.loc[True] # 注意这里是布尔值True,不是字符串
内容的提问来源于stack exchange,提问作者sonicpoem
相关产品推荐
相关产品推荐

