Python 中的布尔变量子集

Subsetting a Boolean variable in Python

提问人:sonicpoem 提问时间:10/6/2023 最后编辑:tripleeesonicpoem 更新时间:10/6/2023 访问量:44

问:

当 DataFrame (“Given_DF”) 具有布尔变量(例如下面的 B)时,如何对 DataFrame 进行子集化以仅保留具有 True 值的变量 B 行?

Given_DF

ID    A     B
0    123   True
1    456   False
2    789   False
3    132   True
4    465   False

“Desired”子集是只有两行(ID 为 0 和 3)的 DataFrame。

  1. 尝试将 B 子集作为列,

    Desired = Given_DF["B"].isin(True)  
    
  2. 尝试索引变量 B 并使用 loc 子集为“True”事件 B。

    prep.sort_index(level=["B"])
    Desired = prep.loc["True"]
    

这两种尝试都没有奏效。帮助将不胜感激。

python 布尔表达式

评论


答:

1赞 Barmar 10/6/2023 #1

与任何其他类型进行子集的方式相同。将与您的条件匹配的表达式放在 df 的下标中。

Desired = Given_DF[Given_DF["B"] == True]

或者更简单地说

Desired = Given_DF[Given_DF["B"]]

.isin()当您具有要匹配的值的集合但不是集合时使用。你必须写信才能让它起作用。True.isin([True])

评论

0赞 Barmar 10/7/2023
当我测试它时,它起作用了。
0赞 Barmar 10/7/2023
在线演示:ideone.com/TUP3Jk
0赞 Barmar 10/7/2023
自您之前的评论以来,发生了什么变化?
0赞 sonicpoem 10/7/2023
我刷新了我的 Jupyter 笔记本,然后新代码运行良好。不好意思。我应该在来之前先检查一下。谢谢。
0赞 Ingwersen_erik 10/6/2023 #2

有多种方法可以实现所需的输出。以下是其中的一些:

# Option 1
filtered_df = Given_DF[Given_DF["B"] == True]

# Option 2: Using `.loc`
filtered_df = Given_DF.loc[Given_DF["B"] == True, :]

# Option 3: Using pd.DataFrame.query
filtered_df = Given_DF.query("B == True")

print(filtered_df)
# Prints:
#
#    ID    A     B
# 0   0  123  True
# 3   3  132  True

如果要在筛选 列等于 ,可以使用以下命令:"B"True

# Filtering column B using option 1, previously exemplified and then selecting column "A"
Given_DF[Given_DF["B"] == True]["A"]

# Filtering column B using option 2, previously exemplified and then selecting columns "A", and "ID"
Given_DF.loc[Given_DF["B"] == True, ["ID", "A"]]

# Filtering column B using option 3, previously exemplified and then selecting its index values
remaining_indexes = Given_DF.query("B == True").index

# You can then use these indexes to filter `Given_DF` dataframe of apply it for many other
# use-cases:
Given_DF.loc[Given_DF.index.isin(remaining_indexes), :]