擅长:python、mysql、java
<p>更新问题后更新答案:</p>
<p>首先,获取一组在索引和列名中都具有特征的唯一值:</p>
<pre><code>names = set(df.columns).intersection(df.index)
</code></pre>
<p>然后迭代它们,使用<code>.loc</code>设置值:</p>
^{pr2}$
<p>这与@Valentino的答案类似,只是做了一个修正,以确保我们只对每个名字循环一次。在</p>
<hr/>
<p>最初的答案是假设我们只需填充对角线:</p>
<p>您可以使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.fill_diagonal.html" rel="nofollow noreferrer">^{<cd2>}</a>来避免循环:</p>
<pre><code>import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.random(size=(5, 5)))
np.fill_diagonal(df.values, 0)
</code></pre>
<p>结果:</p>
<pre><code> 0 1 2 3 4
0 0.000000 0.707695 0.275748 0.449722 0.321772
1 0.343112 0.000000 0.051894 0.879492 0.210940
2 0.845859 0.016546 0.000000 0.347568 0.233525
3 0.483467 0.094216 0.583731 0.000000 0.242194
4 0.638833 0.382917 0.321501 0.190206 0.000000
</code></pre>