Python 行与条件匹配的列的索引

Python 行与条件匹配的列的索引,python,numpy,pandas,Python,Numpy,Pandas,我有Excel文件中的数据,格式为 0,1,0 1,0,0 0,0,1 我想将这些数据转换成一个列表,其中第I个元素表示第I行中非零元素的位置。例如,上述内容将是: [1,0,2] 我试了两种方法都没有用: 路一号 这给了我一个奇怪的错误-idx的长度永远不会与df中的行数相同。对于此数据集,两个数字始终相等。我仔细检查了一遍,没有空行 两只熊猫 这给了我如下输出: 52 NaN NaN NaN 53 1 NaN NaN

我有Excel文件中的数据,格式为

0,1,0
1,0,0
0,0,1
我想将这些数据转换成一个列表,其中第I个元素表示第I行中非零元素的位置。例如,上述内容将是:

 [1,0,2]
我试了两种方法都没有用:

路一号

这给了我一个奇怪的错误-idx的长度永远不会与df中的行数相同。对于此数据集,两个数字始终相等。我仔细检查了一遍,没有空行

两只熊猫

这给了我如下输出:

 52     NaN      NaN      NaN 
 53        1      NaN      NaN 
 54        1      NaN      NaN 

这是合适的形状,但我不知道如何获取列索引。

设置数据帧

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[0,1,0],[1,0,0],[0,0,1]]))
使用np.argwhere查找元素索引:

np.argwhere(df.values ==1)
返回:

array([[0, 1],
       [1, 0],
       [2, 2]], dtype=int64)
因此,对于第0行,第1列包含df的1:

    0   1   2
 0  0   1   0
 1  1   0   0
 2  0   0   1
注:


您可以使用:np.array_splitindex,2,1[1]来获取列索引,例如设置数据帧

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[0,1,0],[1,0,0],[0,0,1]]))
使用np.argwhere查找元素索引:

np.argwhere(df.values ==1)
返回:

array([[0, 1],
       [1, 0],
       [2, 2]], dtype=int64)
因此,对于第0行,第1列包含df的1:

    0   1   2
 0  0   1   0
 1  1   0   0
 2  0   0   1
注:


您可以使用:np.array_splitindex,2,1[1]获取列索引,例如

这里有一个解决方案,适用于有限的用例,包括这一个。如果知道行中只有一个1,则可以转置原始数据帧,使原始数据帧中列的索引成为转置数据帧的行索引。这样,您就可以在每一行中找到最大值并返回这些值的数组

原始数据帧不是此解决方案的最佳示例,因为它是对称的,其转置与原始数据帧相同。因此,为了实现此解决方案,我们将使用如下所示的起始数据帧:

df = pd.DataFrame({0:[0,0,1], 1:[1,0,0], 2:[0,1,0]})

# original data frame --> df
   0  1  2
0  0  1  0
1  0  0  1
2  1  0  0

# transposed data frame --> df.T
   0  1  2
0  0  0  1
1  1  0  0
2  0  1  0
现在要查找每行的最大值:

np.array(df.T.idxmax())
它返回一个值数组,这些值表示包含1的原始数据帧的列索引:

[1 2 0]

这是一个适用于有限用例的解决方案,包括这一个。如果知道行中只有一个1,则可以转置原始数据帧,使原始数据帧中列的索引成为转置数据帧的行索引。这样,您就可以在每一行中找到最大值并返回这些值的数组

原始数据帧不是此解决方案的最佳示例,因为它是对称的,其转置与原始数据帧相同。因此,为了实现此解决方案,我们将使用如下所示的起始数据帧:

df = pd.DataFrame({0:[0,0,1], 1:[1,0,0], 2:[0,1,0]})

# original data frame --> df
   0  1  2
0  0  1  0
1  0  0  1
2  1  0  0

# transposed data frame --> df.T
   0  1  2
0  0  0  1
1  1  0  0
2  0  1  0
现在要查找每行的最大值:

np.array(df.T.idxmax())
它返回一个值数组,这些值表示包含1的原始数据帧的列索引:

[1 2 0]