<p>这里的<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html" rel="nofollow noreferrer">^{<cd1>}</a>问题可能是按列或按索引循环,而不是按二者循环,因此不能在这里使用,如果需要在一个函数中同时使用二者。你知道吗</p>
<p>更好更快的方法是将向量化函数与<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.div.html" rel="nofollow noreferrer">^{<cd2>}</a>、<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mul.html" rel="nofollow noreferrer">^{<cd3>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sum.html" rel="nofollow noreferrer">^{<cd4>}</a>一起使用,最后将<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.round.html" rel="nofollow noreferrer">^{<cd5>}</a>与<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html" rel="nofollow noreferrer">^{<cd6>}</a>一起用于输出中的整数:</p>
<pre><code>c = df.sum(axis=1)
r = df.sum()
t = r.sum()
df1 = df.div(c, axis=0).mul(t).div(r).mul(100).round().astype(int)
print (df1)
a b c d
A 111 81 134 42
B 70 82 102 170
C 101 148 37 154
</code></pre>
<p>为了提高性能,可以使用<code>numpy</code>:</p>
<pre><code>#pandas 0.24+
arr = df.to_numpy()
#pandas below
#arr = df.values
c = arr.sum(axis=1)
r = arr.sum(axis=0)
t = r.sum()
out = np.round(arr / c[:, None] * t / r * 100).astype(int)
df = pd.DataFrame(out, index=df.index, columns=df.columns)
print (df)
a b c d
A 111 81 134 42
B 70 82 102 170
C 101 148 37 154
</code></pre>