我正在安装排名系统,基本上我有一个名为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
答案 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