我是 Python 新手。我有一个 NxN 矩阵,我想知道每一行的最大值。接下来,我想取消(更新为零)除此最大值之外的所有其他值。如果该行包含多个最大值,则应保留所有这些最大值。
使用 DataFrame,我尝试获取每一行的最大值。然后我尝试获取这些最大值的索引。代码如下。
matrix = [(22, 16, 23),
(12, 6, 43),
(24, 67, 11),
(87, 9,11),
(66, 36,66)
]
dfObj = pd.DataFrame(matrix, index=list('abcde'), columns=list('xyz'))
maxValuesObj = dfObj.max(axis=1)
maxValueIndexObj = dfObj.idxmax(axis=1)
上面的代码没有考虑多个最大值。仅返回第一次出现。 另外,我坚持如何相应地更新矩阵。我的预期输出是:
matrix = [(0, 0, 23),
(0, 0, 43),
(0, 67, 0),
(87, 0,0),
(66, 0,66)
]
你能帮我解决这个问题吗?
最佳答案
使用 df.where()
:
dfObj.where(dfObj.eq(dfObj.max(1),axis=0),0)
x y z
a 0 0 23
b 0 0 43
c 0 67 0
d 87 0 0
e 66 0 66
对于 ND 数组而不是数据帧,调用 .values
在上面的代码之后:
dfObj.where(dfObj.eq(dfObj.max(1),axis=0),0).values
或者更好的是to_numpy()
:
dfObj.where(dfObj.eq(dfObj.max(1),axis=0),0).to_numpy()
或np.where
:
np.where(dfObj.eq(dfObj.max(1),axis=0),dfObj,0)
array([[ 0, 0, 23],
[ 0, 0, 43],
[ 0, 67, 0],
[87, 0, 0],
[66, 0, 66]], dtype=int64)
关于python - 如何根据每行的多个最大值更新矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57513363/