python - 获取具有缺失值的两个 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?
解决方案
你可以做到这一点,(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')
推荐阅读
- android - 如何检查用户何时在 Firebase 中对手机进行了身份验证?
- flutter - Flutter initState 等待异步函数完成
- javascript - 如何慢慢改变导航栏背景
- javascript - 根据 WooCommerce 产品的数量在侧边栏中隐藏 div
- postgresql - 如何将数组运算符用于类型 bytea[]?
- javascript - Webpack + Babel(参考错误:找不到变量:需要)
- flutter - 如果使用 onDoubleTap,InkWell 效果开始延迟;想要在小部件被触摸时触发它
- sql-server - 根据单个表中的值组合检索计数
- powershell - 通过 PowerSehll 启用没有旧电话号码的 O365 MFA
- c++ - 任何人都可以解释一下 char - 'a'