Set values on the diagonal of pandas.DataFrame

后端 未结 5 2220
日久生厌
日久生厌 2020-11-27 17:56

I have a pandas dataframe I would like to se the diagonal to 0

import numpy
import pandas

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

Out[6]:
     0           


        
5条回答
  •  悲&欢浪女
    2020-11-27 18:33

    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
    

    Note that this will only work if df has the same number of rows as columns. Another way which will work for arbitrary shapes is to use np.fill_diagonal:

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

提交回复
热议问题