Python 数据框架中的产品评分
我有产品id数据框。我想通过对每个产品打分来找到最好的产品。对于每个变量,值越大,产品得分越好,但退货除外,这意味着退货越多,得分越低。此外,我需要为发货收入和退货的变量分配不同的权重,这些变量的重要性可能会增加20% 评分函数可以如下所示 分数=发货单位+1.2*发货收入+订单单位-1.2退货+查看+库存 其中0Python 数据框架中的产品评分,python,pandas,product,segment,Python,Pandas,Product,Segment,我有产品id数据框。我想通过对每个产品打分来找到最好的产品。对于每个变量,值越大,产品得分越好,但退货除外,这意味着退货越多,得分越低。此外,我需要为发货收入和退货的变量分配不同的权重,这些变量的重要性可能会增加20% 评分函数可以如下所示 分数=发货单位+1.2*发货收入+订单单位-1.2退货+查看+库存 其中0 考虑到你的dataframe你期望得到什么?事实上,我为每个产品添加了一个问题,btw 0和100谢谢。你的权重不能确保分数在[0,100]范围内。这很好,它可以超过100,但我们可
考虑到你的
dataframe
你期望得到什么?事实上,我为每个产品添加了一个问题,btw 0和100谢谢。你的权重不能确保分数在[0,100]范围内。这很好,它可以超过100,但我们可以将所有分数压缩到100谢谢这是实现它的一种方法,w=np.array([1,1.2,1,1,1])
score=df_product.drop('ProductId',axis=1)。apply(lambda x:sum(w*x),axis=1)
normalizedScore=100*(score-score.min())/(score.max()-score.min())
我们可以通过0和100挤压分数吗。ThanksAll得分>100…可能会将每个变量按0和100进行缩放,然后求和?我将0-1之间的列标准化并乘以100
df_product=pd.DataFrame({'ProductId':['1','2','3','4','5','6','7','8','9','10'],'ShippedUnits':
[6,8,0,4,27,3,4,14,158,96],'ShippedRevenue':[268,1705,1300,950,1700,33380,500,2200,21000,24565]
,'OrderedUnits':[23,78,95,52,60,76,68,92,34,76],'Returns':[0,0,6,0,2,5,6,5,2,13],'View':
[0,655,11,378,920,12100,75,1394,12368,14356],'Stock':[24,43,65,27,87,98,798,78,99,231]
})
df_product=pd.DataFrame({'ProductId':['1','2','3','4','5','6','7','8','9','10'],'ShippedUnits':
[6,8,0,4,27,3,4,14,158,96],'ShippedRevenue':[268,1705,1300,950,1700,33380,500,2200,21000,24565]
,'OrderedUnits':[23,78,95,52,60,76,68,92,34,76],'Returns':[0,0,6,0,2,5,6,5,2,13],'View':
[0,655,11,378,920,12100,75,1394,12368,14356],'Stock':[24,43,65,27,87,98,798,78,99,231]
})
df_product['score'] = df_product['ShippedUnits'] +1.2*df_product['ShippedRevenue']+df_product['OrderedUnits']-1.2*df_product['Returns']+df_product['View']+df_product['Stock']
df_product['score']=(df_product['score']-df_product['score'].min())/(df_product['score'].max()-df_product['score'].min())*100
df_product
df["Score"] = df["ShippedUnits"] + df["OrderedUnits"] \
+ df["View"] + df["Stock"] \
+ 1.2 * df["ShippedRevenue"] \
- 1.2 * df["Returns"]
df["Norm1"] = df["Score"] / df["Score"].max() * 100
df["Norm2"] = df["Score"] / df["Score"].sum() * 100
df["Norm3"] = (df["Score"] - df["Score"].min()) / (df["Score"].max() - df["Score"].min()) * 100
>>> df[["ProductId", "Score", "Norm1", "Norm2", "Norm3"]]
ProductId Score Norm1 Norm2 Norm3
0 1 374.6 0.715883 0.250040 0.000000
1 2 2830.0 5.408298 1.888986 4.726249
2 3 1723.8 3.294284 1.150613 2.596993
3 4 1601.0 3.059606 1.068646 2.360622
4 5 3131.6 5.984673 2.090300 5.306781
5 6 52327.0 100.000000 34.927558 100.000000
6 7 1537.8 2.938827 1.026460 2.238973
7 8 4212.0 8.049382 2.811452 7.386377
8 9 37856.6 72.346208 25.268763 72.146811
9 10 44221.4 84.509718 29.517180 84.398026