<p>问题的关键在于:</p>
<ol>
<li><code>.replace</code>所有{<cd2>}与<code>np.nan</code>一起,因此它们不会与其他数据帧一起计算平均值</李>
<li>但是,这意味着如果在另一个数据帧中有一个伴随的1,则会出现替换0的不希望出现的效果。对于这些,当另一个数据帧的同一单元格中存在1时,您可以在列中循环并应用向量化的<code>np.where</code>将<code>NaN</code>值替换为<code>0</code></李>
</ol>
<p>代码:</p>
<pre><code>import numpy as np, pandas as pd
df1 = df1.replace(0,np.nan)
df2 = df2.replace(0,np.nan)
for col in df1.columns:
df2[col] = np.where(df1[col] == 1, df2[col].replace(np.nan,0), df2[col])
df1[col] = np.where(df2[col] == 1, df1[col].replace(np.nan,0), df1[col])
df = (df1.assign(average_df1=df1.mean(axis=1),
average_df2=df2.mean(axis=1),
sum_df1_df2=df1.mean(axis=1)+df2.mean(axis=1))
.iloc[:,-3:])
df
</code></pre>
<p><strong>输出</strong>(前5行按预期相加为1我不确定输入的最后5行中的数据是否错误,但无法将它们相加为1:</p>
<pre><code> average_df1 average_df2 sum_df1_df2
0 0.596667 0.403333 1.000000
1 0.450000 0.550000 1.000000
2 0.000000 1.000000 1.000000
3 0.663333 0.336667 1.000000
4 0.306667 0.693333 1.000000
5 0.900000 0.900000 1.800000
6 0.650000 0.150000 0.800000
7 0.346667 0.250000 0.596667
8 0.580000 0.580000 1.160000
9 NaN NaN NaN
</code></pre>