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如何匹配索引和列,这样带有行和列的子集也可以工作。非常感谢!