PythonPandas:如何仅对多列中>1000的数据进行平均?
我是熊猫的新手。我只想平均收入从 Revenue1 到 Revenue3 > 1000。谢谢!
输入:
|Name | Revenue1| Revenue2| Revenue3|
|Peter| 1000 | 2000 | 3000 |
|Jane | 9000 | 10000 | 5000 |
期望输出:
| Name | Average |
| Peter | 2500 |
| Jane | 8000 |
Peter =average (2000+ 3000) = 2500
Jane =average (9000+ 10000 +5000) = 8000
回答
尝试通过filter(),gt()和mean():
out=df.filter(like='Revenue')
df['Average']=out[out.gt(1000)].mean(axis=1)
的输出df:
Name Revenue1 Revenue2 Revenue3 Average
0 Peter 1000 2000 3000 2500.0
1 Jane 9000 10000 5000 8000.0
代码分解:
首先,我们通过filter()方法选择所有命名为“Revenue”的列,它会给出一个像这样命名的列的 DataFrame,所以我们将它存储在 out 变量中
out=df.filter(like='Revenue')
#output of above code:
Revenue1 Revenue2 Revenue3
0 1000 2000 3000
1 9000 10000 5000
然后我们将过滤掉值大于 1000 的行:
out.gt(1000)
#your condition
#output of above code:
Revenue1 Revenue2 Revenue3
0 False True True
1 True True True
正如你看到的情况让你布尔值所以现在我们将是布尔面具传递给了那么那里是True在上面的布尔值,你会得到的价值观和那里是False你会得到NaN这个是知道的布尔掩码:
out[out.gt(1000)]
#output of above code:
Revenue1 Revenue2 Revenue3
0 NaN 2000 3000
1 9000.0 10000 5000
最后,我们将通过mean()方法计算均值,axis=1因此NaN's忽略..换句话说,计算均值时mean()不考虑方法NaN's(因为默认情况下skipna=None在mean()方法中)
out[out.gt(1000)].mean(axis=1)
#output of above code:
0 2500.0
1 8000.0
dtype: float64
最后,我们将此结果分配回 df:
df['Average']=out[out.gt(1000)].mean(axis=1)
更新:
如果df还有其他数字列(如“收入”),并且您还想将其与“收入”等列一起包含在计算中,则使用:
out=df.filter(regex='Revenue|Income')
df['Average']=out[out.gt(1000)].mean(axis=1)