python - pandas:如果列大于 x,如何获得选择两列的最大值,否则选择平均值?
问题描述
我有一个看起来像这样的 df 并且想要添加一个 adj 平均值,如果两列(avg 或 rolling_mean)之一为 0 则选择最大值,否则它获取两列的平均值。
ID Avg rolling_mean adj_mean (goal to have this column)
0 5 0 5
1 6 6.3 6.15
2 5 8 6.5
3 4 0 4
我能够使用此代码获得列的最大值
df["adj_mean"]=df[["Avg", "rolling_mean"]].max(axis=1)
但如果两个值都大于零,则不确定如何添加平均值。
非常感谢!
解决方案
一种方法是将 0 视为NaN
,然后简单地计算平均值
df['adj_mean'] = df.replace({0: np.nan})[["Avg", "rolling_mean"]].mean(axis=1)
Out[1]:
rolling_mean Avg adj_mean
0 0.0 5 5.00
1 6.3 6 6.15
2 8.0 5 6.50
3 0.0 4 4.00
默认情况下,df.mean()
跳过空值。根据文档:
skipna : bool,默认 True 计算结果时排除 NA/null 值。
推荐阅读
- sql - SQL QUERY : 查找每年售出的副本 > 10000
- reactjs - 在反应应用程序中以无头模式运行时 Puppeteer 测试失败
- java - setZone 方法有问题吗?
- r - 将多个 CSV 合并为一个数据框
- c++ - 调用接收到的事件实例时使用 QCoreApplication::postEvent() 报告线程清理程序
- scala - 动态类型的模式匹配作为函数的参数
- python - Python TCP 服务器在调用 socket.shutdown(1) 时抛出 OSError: [WinError 10057]
- algorithm - 这个选择排序代码会在 O(n) 中工作以获得最佳情况吗?
- c# - 在不同的用户下从 C# 自动化 PowerShell
- python - 石墨烯-Python + 私有 Azure 函数?