获取行和列的pandas布尔数据框

3

我有一个布尔类型的Pandas数据框(所有的值都是TrueFalse),我需要获取每行中值为True的列。

有什么想法吗?


3
np.where(df)是NumPy函数,用于在给定条件下返回符合条件的元素索引或布尔值数组。如果没有提供条件,则返回所有非零元素的索引。如果需要更详细的解释,请提供样本数据和期望输出。 - Quang Hoang
3个回答

0

使用 [np.where(row)[0] for index, row in df.iterrows()],它将生成一个包含每行中True值索引的numpy数组列表。添加.tolist()以获取列表的列表。

无法堆叠结果数组,因为它们可能具有不同的长度。

示例:

df = pd.DataFrame([[True, False],[False,True],[True,True], [False,False]])
[np.where(row)[0].tolist() for  _, row in df.iterrows()]

[[0], [1], [0, 1], []]

0

感谢大家的回答。

我通过for循环解决了它。

以下是代码:

chbay = {}
for item in levels:
    baychan = convs[convs[item] == True]
    chbay[item] = baych[item]

convs是数据集的名称,levels是数据集列名的列表。

我在Python方面还很新,所以我的解决方案可能不是很整洁。我会尝试您提供的一些想法,以便学习新的方法。

非常感谢。


0
您可以尝试这个,它会删除所有没有True匹配的行:
df.replace(False, np.NaN).dropna(how='all').replace(1.0, True).replace(np.NaN, False)

输出:

     date  Amount   line   bool
4    True   False  False  False
8   False    True  False  False
9   False    True  False  False
11  False    True  False  False
12  False    True  False  False
13  False    True  False  False
14  False    True  False  False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接