当前位置: 首页 > 面试题库 >

在pandas.DataFrame的对角线上设置值

百里雅珺
2023-03-14
问题内容

我有一个熊猫数据框,我想将对角线设置为0

import numpy
import pandas

df = pandas.DataFrame(numpy.random.rand(5,5))
df

Out[6]:
     0           1           2           3               4
0    0.536596    0.674319    0.032815    0.908086    0.215334
1    0.735022    0.954506    0.889162    0.711610    0.415118
2    0.119985    0.979056    0.901891    0.687829    0.947549
3    0.186921    0.899178    0.296294    0.521104    0.638924
4    0.354053    0.060022    0.275224    0.635054    0.075738
5 rows × 5 columns

现在我想将对角线设置为0:

for i in range(len(df.index)):
    for j in range(len(df.columns)):
        if i==j:
            df.loc[i,j] = 0
df
Out[9]:
     0           1           2           3           4
0    0.000000    0.674319    0.032815    0.908086    0.215334
1    0.735022    0.000000    0.889162    0.711610    0.415118
2    0.119985    0.979056    0.000000    0.687829    0.947549
3    0.186921    0.899178    0.296294    0.000000    0.638924
4    0.354053    0.060022    0.275224    0.635054    0.000000
5 rows × 5 columns

但是必须有比这更Python化的方式!?


问题答案:
In [21]: df.values[[np.arange(df.shape[0])]*2] = 0

In [22]: df
Out[22]: 
          0         1         2         3         4
0  0.000000  0.931374  0.604412  0.863842  0.280339
1  0.531528  0.000000  0.641094  0.204686  0.997020
2  0.137725  0.037867  0.000000  0.983432  0.458053
3  0.594542  0.943542  0.826738  0.000000  0.753240
4  0.357736  0.689262  0.014773  0.446046  0.000000

请注意,这仅df在行数与列数相同时起作用。适用于任意形状的另一种方法是使用np.fill_diagonal:

In [36]: np.fill_diagonal(df.values, 0)


 类似资料:
  • 问题内容: 将DataFrame设置为redis之后,再将其取回,redis返回一个字符串,但我想不出一种将该str转换为DataFrame的方法。 我该如何适当地做这两个? 问题答案: 组: 得到:

  • 可能聪明的你已经发现了魔方矩阵各行或列数字相加后的奇妙属性,无论是各行相加,还是各列相加,还是两条对角线的数字相加,都得到同一个结果。下面让我们用MATLAB来证实这一结论。首先试着输入 sum(A) MATLAB显示 ans = 34 34 34 34 如果你没有指定变量,MATLAB就会用变量ans(answer的缩写),来储存计算的结果。这里显示的是一个行

  • Since 8.0 setOptionMenu 设置标题栏右边的按钮属性。 该接口仅负责设置,需要额外调用showOptionMenu保证该按钮的显示。 注意:由于苹果的ATS限制,icon URL必须为https链接或base64,http链接会被忽略 使用方法 AlipayJSBridge.call('setOptionMenu', { title : '按钮', // 与icon、ic

  • 问题内容: 我试图用d3.js为s svg:image(嵌入SVG中的图像)制作圆角。我找不到如何正确设置图像样式的方法,因为根据W3C规范,我应该可以使用CSS,但是较宽的边框或圆角的边缘对我来说都是有效的。 提前致谢。 编辑: 经过测试的浏览器:Firefox,Chrome 问题答案: “边界半径”不适用于svg:image元素(无论如何)。一种解决方法是创建带有圆角的矩形,并使用剪切路径。

  • 给定主教在8*8棋盘上的位置,任务是计算主教一次可以访问的方格总数。主教的位置用棋盘的行和列编号表示。 例如: 方法:在国际象棋比赛中,主教只能沿对角线移动,并且每一步的距离没有限制。 所以,我们也可以说Bishop可以从当前位置以四种方式移动,即对角左上角、右上角、左下角和右下角。 我们可以通过以下方法计算每次移动中访问的方块数: 在左上角移动中访问的总方块= 右上角移动中访问的总方块= 在左下

  • 我有几个可行的解决方案,首先测量视图并以此方式设置角的大小,但随后我发现使用了对象。 但是,我仍然找不到XML中的解决方案。