<p>为了使它成为一个整洁的一行,我在进口方面做了一些欺骗,但以下是我能做的最好的:</p>
<pre><code>import pandas as pd
import numpy as np
from numpy.ma import average as avg
from numpy.ma import masked_array as ma
df1 = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
df2 = pd.DataFrame([[3, 1, np.nan, 1],
[2, 5, np.nan, 3],
[np.nan, 4, np.nan, 2],
[np.nan, 2, 1, 5]],
columns=list('ABCD'))
df1.combine(df2, lambda x, y: avg([ma(x, np.isnan(x)), ma(y, np.isnan(y))], 0, [1, 2]))
</code></pre>
<p>编辑:</p>
<pre><code>import pandas as pd
import numpy as np
from numpy.ma import average as avg
from numpy.ma import masked_array as ma
df1 = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
df2 = pd.DataFrame([[3, 1, np.nan, 1],
[2, 5, np.nan, 3],
[np.nan, 4, np.nan, 2],
[np.nan, 2, 1, 5]],
columns=list('ABCD'))
def df_average(dfs, wgts):
return pd.DataFrame(avg([ma(df.values, np.isnan(df.values)) for df in dfs], 0, wgts))
df_average(dfs=[df1, df2], wgts=[1, 2])
</code></pre>