首页 > 解决方案 > 获取具有缺失值的两个 DataFrame 的平均值

问题描述

我有两个 DataFrame,我试图制作一个包含两者平均值的数据框。每个都有缺失值。

如果没有缺失值,我可以使用 (df1 + df2)/2。

我想取那些具有两个数据点的平均值,同时返回“NaN”作为缺失数据点的“平均值”。

例如:

df1 = pd.DataFrame({'ID': ['Alpha', 'Bravo', 'Charlie', 'Delta'], 'Var1': [15,'NaN', 17, 18], 'Var2': [1.0, 1.5, 2.0, 1.5], 'Var3': [1, 0, 0, 1]})   

df1 = df1.set_index('ID')

        Var1  Var2  Var3
ID                      
Alpha     15   1.0     1
Bravo    NaN   1.5     0
Charlie   17   2.0     0
Delta     18   1.5     1

_

df2 = pd.DataFrame({'ID': ['Alpha', 'Bravo', 'Charlie', 'Delta'], 'Var1': [20, 15, 17, 20], 'Var2': [1.2,'NaN', 3.0, 1.0], 'Var3': [0, 0, 1, 1]})

df2=df2.set_index('ID')

         Var1 Var2  Var3
ID                      
Alpha      20  1.2     0
Bravo      15  NaN     0
Charlie    17    3     1
Delta      20    1     1

_

生成的 DataFrame 应该是:

         Var1   Var2  Var3
ID                      
Alpha      17.5  1.10  0.5
Bravo      NaN   NaN   0.0
Charlie    17.0  2.50  0.5
Delta      19.0  1.25  1.0

所以,简单来说,我的问题是如何在忽略具有 NaN 的点的情况下执行 (df1 + df2)/2?

标签: pythonpandas

解决方案


你可以做到这一点,(df1 + df2) / 2

您真正的问题是您的 DataFrames 中包含 NaN 的列是 dtype object,而不是浮动数据类型。解决这个问题,上面的方法就可以了。理想情况下,通过np.nan输入来解决这个问题,或者稍后强制列 dtypes 为数字。

df1 = df1.apply(pd.to_numeric, errors='coerce')
df2 = df2.apply(pd.to_numeric, errors='coerce')

推荐阅读