我正在安装排名系统,基本上我有一个名为site_fees的字段,占考虑总数的10%。站点费用为0将获得全部10分。我想做的是计算非零字段将获得多少点,但是我为此很努力。
我最初的方法是将数据帧分为2个数据帧(dfb,其中site_fees为0,dfa,其中> 0),然后计算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
最佳答案
这是一种方法:
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
关于python - 用 Pandas 计算加权平均值以降低成本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56149791/