python - 当行总和为某个数字时如何更改对角线值
问题描述
我相信对于具有一定 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
解决方案
假设您有一个方形数据框,我们可以创建一个布尔掩码,表示行总和为 的条件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
推荐阅读
- python-3.x - 不可接受的字符#x001b:不允许使用特殊字符
- javascript - 我的禁令命令没有做任何事情 discord.js
- javascript - Express Typescript 为错误中间件使用正确的类型
- javascript - React 和 Typescript - 由于类型错误“将类型 'Global & typeof globalThis' 转换为类型 'GlobalWithFetchMock'...”而导致测试失败
- sql - 将我的热图连接到将提取并显示特定数据的 sql 数据库
- c# - WindowsAzure.Storage.Queue 是否与 dotnet core 3.1 兼容?
- go - Golang如何在使用bufio.NewScanner扫描单行后scanf
- javascript - 如何摆脱 Android 上 Chrome 的“媒体播放”通知?
- rust - 如何在传递给实例方法的异步移动闭包中使用结构实例的字段?
- transloco - Transloco - 有没有办法在复数规则中引用其他翻译?