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

我有一个熊猫数据框,我想将对角线设置为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)

以上是 在pandas.DataFrame的对角线上设置值 的全部内容, 来源链接: utcz.com/qa/401687.html

回到顶部