PythonPandas:如何仅对多个列中大于1000的数据求平均值?

2024-09-27 21:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我对熊猫不熟悉。我只想平均从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

Tags: namegtpeteraveragejanerevenue2revenue1revenue3
3条回答

或者用面具

df['average'] = df.mask(df.filter(like='Revenue')<=1000).mean(1)
   Name  Revenue1  Revenue2  Revenue3  Revenue4  average
0  Peter      1000      2000      3000      2500   2500.0
1   Jane      9000     10000      5000      8000   8000.0

通过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”的列,它将给出一个名为“Revenue”的列的数据帧,因此我们将其存储在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

如您所见,条件为您提供布尔值,因此现在我们将把该布尔掩码传递给out,以便在上述布尔值中有True的地方,您将获得值,在有False的地方,您将获得NaN这称为布尔掩码:

out[out.gt(1000)]
#output of above code:
   Revenue1     Revenue2    Revenue3
0   NaN         2000        3000
1   9000.0      10000       5000

最后,我们将通过axis=1上的mean()方法计算平均值,因此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)

你好,试试这个

 d['average']=d[d.filter(like='revenue')>1000].mean(1)
 d

相关问题 更多 >

    热门问题