首页 > 解决方案 > 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)

但如果两个值都大于零,则不确定如何添加平均值。

非常感谢!

标签: pythonpandasdatasetdata-sciencenp

解决方案


一种方法是将 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 值。


推荐阅读