问题实际上很简单,但是由于我是该语言的新手,所以我无法在Python中翻译它。
我有一个布尔值“ True”和“ False”的数据框,并且我需要一个false元素的坐标列表:
我需要对一系列矩阵进行此操作,这些矩阵会自动生成具有变化的行数和列数,但始终具有布尔值。
例如,我有一个像这样的矩阵:
0 1 2
0 TRUE FALSE FALSE
1 TRUE FALSE TRUE
2 TRUE TRUE TRUE
3 FALSE TRUE TRUE
4 TRUE TRUE TRUE
5 TRUE TRUE TRUE
6 TRUE TRUE TRUE
7 TRUE TRUE TRUE
8 TRUE TRUE TRUE
我正在寻找一个像[[0,1),(0,2),(1,1),(3,0)]
的列表我试图用pandas(因此请将矩阵视为“ pd.DataFrame”对象)和numpy解决此问题,但是我是该语言的新手,似乎无法理解函数的工作方式和使用方式他们。
答案 0 :(得分:2)
您可以堆叠数据框并使用布尔索引:
t=df.stack()
t[~t].index.values
输出:
array([(0, 1), (0, 2), (1, 1), (3, 0)], dtype=object)
答案 1 :(得分:1)
使用np.argwhere
np.argwhere(~df.values )
array([[0, 1],
[0, 2],
[1, 1],
[3, 0]], dtype=int64)
在@Scott Boston评论后编辑
为此,我们可以使用np.where
,然后使用zip
这两个数组来获得协调:
list(zip(*np.where(~df)))
[(0, 1), (0, 2), (1, 1), (3, 0)]
说明
np.where
给我们两个数组,第一个是行索引,第二个是列索引。
np.where(~df)
(array([0, 0, 1, 3], dtype=int64), array([1, 2, 1, 0], dtype=int64))
因此,如果我们zip
这些数组并将其转换为列表,则会得到所需的输出。