提问人:sonicpoem 提问时间:10/6/2023 最后编辑:tripleeesonicpoem 更新时间:10/6/2023 访问量:44
Python 中的布尔变量子集
Subsetting a Boolean variable in Python
问:
当 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。
尝试将 B 子集作为列,
Desired = Given_DF["B"].isin(True)
尝试索引变量 B 并使用 loc 子集为“True”事件 B。
prep.sort_index(level=["B"]) Desired = prep.loc["True"]
这两种尝试都没有奏效。帮助将不胜感激。
答:
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), :]
评论