Python 如何计算两个数据帧的两个平均值,但前提是两个单元格都可用?

Python 如何计算两个数据帧的两个平均值,但前提是两个单元格都可用?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个这样的数据帧: df1 = pd.DataFrame({ "a": [0.5,0.5,0.5], "b": [0.5,0.5,0.5], "c": [0.5,0.5,0.5] }, index = ["a", "b", "c"]) df1 average = pd.DataFrame() for r in df1.columns: f

我有两个这样的数据帧:

df1 = pd.DataFrame({
    "a": [0.5,0.5,0.5],
    "b": [0.5,0.5,0.5],
    "c": [0.5,0.5,0.5]
}, index = ["a", "b", "c"])
df1
average = pd.DataFrame()

for r in df1.columns:
    for c in df1.columns:
        try:
            average.loc[r, c] = 0.4 * df1.loc[r, c] + 0.6 * df2.loc[r, c]
        except KeyError:
            average.loc[r, c] = df1.loc[r, c]
        
average

df2
始终是
df1
的子集

如果
df2
还包含
df1
的单元格(相同的索引和列),我想计算两者之间的加权平均值。如果不是,则应保留
df1
的值

我可以这样做:

df1 = pd.DataFrame({
    "a": [0.5,0.5,0.5],
    "b": [0.5,0.5,0.5],
    "c": [0.5,0.5,0.5]
}, index = ["a", "b", "c"])
df1
average = pd.DataFrame()

for r in df1.columns:
    for c in df1.columns:
        try:
            average.loc[r, c] = 0.4 * df1.loc[r, c] + 0.6 * df2.loc[r, c]
        except KeyError:
            average.loc[r, c] = df1.loc[r, c]
        
average

然而,对于更大的数据帧,这需要相当长的时间——有没有更快的方法


非常感谢

试试
fillna

(df1 * 0.4 + df2 * 0.6).fillna(df1)
输出:

      a     b    c
a  0.38  0.38  0.5
b  0.38  0.38  0.5
c  0.50  0.50  0.5

美好的我喜欢pandas如何匹配索引和列,这样带有行和列的子集也可以工作。非常感谢!