首页 > 解决方案 > 当行总和为某个数字时如何更改对角线值

问题描述

我相信对于具有一定 Python 经验的人来说,这是一个简单的问题。我有一个这样的数据框。我想要的是,如果行总和为 0,对角线值变为 1。例如 df.loc[2,2] 和 df.loc[3,3] 变为 1。

在此处输入图像描述

我有这样的代码,但我知道 if 行肯定有几个问题。

for i, j in zip(range(len(df.index)), range(len(df.columns))):
    if i == j & df.iloc[[i]].sum(axis = 1) == 0:
        df.loc[i, j] = 1

标签: pythonpandasdataframefor-loopif-statement

解决方案


假设您有一个方形数据框,我们可以创建一个布尔掩码,表示行总和为 的条件0,然后使用此掩码更新数据框的对角线值:

m = df.sum(1).eq(0)
df.values[m, m] = 1

          1    2    3         4         5         6
1  0.997476  0.0  0.0  0.002414  0.000110  0.000000
2  0.000000  1.0  0.0  0.000000  0.000000  0.000000
3  0.000000  0.0  1.0  0.000000  0.000000  0.000000
4  0.000000  0.0  0.0  0.997281  0.002521  0.000173
5  0.000000  0.0  0.0  0.000693  0.999222  0.000054
6  0.000046  0.0  0.0  0.035641  0.964293  0.000000

推荐阅读