我有一个布尔类型的Pandas
数据框(所有的值都是True
或False
),我需要获取每行中值为True
的列。
有什么想法吗?
使用 [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], []]
感谢大家的回答。
我通过for循环解决了它。
以下是代码:
chbay = {}
for item in levels:
baychan = convs[convs[item] == True]
chbay[item] = baych[item]
convs是数据集的名称,levels是数据集列名的列表。
我在Python方面还很新,所以我的解决方案可能不是很整洁。我会尝试您提供的一些想法,以便学习新的方法。
非常感谢。
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
np.where(df)
是NumPy函数,用于在给定条件下返回符合条件的元素索引或布尔值数组。如果没有提供条件,则返回所有非零元素的索引。如果需要更详细的解释,请提供样本数据和期望输出。 - Quang Hoang