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=Nonemean()方法中)

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)


以上是PythonPandas:如何仅对多列中>1000的数据进行平均?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>