用熊猫计算加权平均值以降低成本

时间:2019-05-15 12:50:23

标签: python pandas weighted-average

我正在安装排名系统,基本上我有一个名为site_fees的字段,占考虑总数的10%。站点费用为0将获得全部10分。我想做的是计算非零字段将获得多少点,但是我正在努力做到这一点。

我最初的方法是将数据帧分为2个数据帧(其中site_fees为0的dfb和大于0的dfa),然后计算dfa的平均值,将dfb的等级指定为10,然后将两者合并。 >

代码如下:

dfSitesa = dfSites[dfSites['site_fees'].notnull()]
dfSitesb = dfSites[dfSites['site_fees'].isnull()]
dfSitesa['rating'] = FeeWeight * \
dfSitesa['site_fees'].min()/dfSitesa['site_fees']
dfSitesb['rating'] = FeeWeight
dfSites = pd.concat([dfSitesa,dfSitesb])

这将产生一个输出,但是dfa的结果不正确,因为dfa的最小值是5000,而不是0,因此,收取5000美元费用的网站的评级是10(最大值,不正确)。我在做什么错了?

最小的非零site_fee为5000,最大为15000。基于此,我希望可以得到一个通用的排名系统,例如:

15000 | 0
10000 | 3.3
5000  | 6.6
0     | 10

1 个答案:

答案 0 :(得分:1)

这是一种实现方法:

dfSites = pd.DataFrame({'site_fees':[0,1,2,3,5]})
FeeWeight = 10

dfSitesa = dfSites[dfSites['site_fees'].notnull()]
dfSitesb = dfSites[dfSites['site_fees'].isnull()]
dfSitesb['rating'] = FeeWeight
factor = (dfSitesa['site_fees'].max() - dfSitesa['site_fees'].min())
dfSitesa['rating'] = FeeWeight * ( 1 - ( (dfSitesa['site_fees'] -  dfSitesa['site_fees'].min()) / factor) )
dfSites = pd.concat([dfSitesa,dfSitesb])

In [1] : print(dfSites)
Out[1] : 
site_fees   rating
0   0   10.0
1   1   8.0
2   2   6.0
3   3   4.0
4   5   0.0