多属性数据排序问题
假如我有100组数据需要排序:它们共有的属性
体重: 占比 10% 重的优先
身高: 占比 15% 高的优先
姓氏: 占比 10% 赵钱孙李周吴郑 优先顺序
上网时长: 占比 30% 长的优先
年纪: 占比 15% 大的优先
学历: 占比 20% 高的优先
有没有py库可以计算它们的综合数据大小进行排序,或者有什么算法可以计算。
谢谢。{:5_109:} 可以通过sorted函数进行排序,确定其中的key参数 tommyyu 发表于 2022-12-2 20:25
可以通过sorted函数进行排序,确定其中的key参数
sorted我只用过同属性值相比较,复杂点的不知道咋用。我想计算综合得分值进行比较,不知道行不行。 我不是第一个 发表于 2022-12-2 20:42
sorted我只用过同属性值相比较,复杂点的不知道咋用。我想计算综合得分值进行比较,不知道行不行。
你可以参考一下这个例子>>> class A:
def __init__(self, x, y):
self.x = x
self.y = y
def print_self(self):
print(self.x, self.y)
>>> def cmp(s):
return s.x + s.y
>>> n = list(sorted(, key = cmp))
>>> n.print_self()
1 2
>>> n.print_self()
3 4
>>> n.print_self()
5 6
>>> 估计只有单独弄循环,然后将每个值乘占比最后加起来再排序吧,这个规则都是你自己在写,肯定是没有现存的。把数据读到pandas然后为每一种属性排序加列算出占比得分,最后把这些分加起来,再排序。 gywjj 发表于 2022-12-2 21:53
估计只有单独弄循环,然后将每个值乘占比最后加起来再排序吧,这个规则都是你自己在写,肯定是没有现存的。 ...
大概已经弄出来了。每组不同属性的值差距是很大的,核心主要是要算出单个属性比分,对综合比分影响不大才行。 tommyyu 发表于 2022-12-2 20:47
你可以参考一下这个例子
谢谢给的代码,有启发。估计搞成了。 from collections import namedtuple
Person = namedtuple('Person', 'name w h age edu netTime')
data = [('张三', 70, 178, 20, '本科', 2), ('李四', 68, 178, 24, '研究生', 1), ('王五', 60, 170, 28, '大专', 3)]
ps = [ Person(*d) for d in data]
ps
def f(d):
xs = list('赵钱孙李周郑王张卢崔刘')
xs_v = dict(zip(xs, range(len(xs), 0, -1)))# 越排在前面,值越大
edu_v = {'大专': 1, '本科': 2, '研究生': 3}
return xs_v] * 0.1 + d.w*0.1 + d.h*0.15 + d.age*0.15 + edu_v*0.2 + d.netTime*0.3 # 具体算法可以根据需要自己改
f(ps)
38.1
sorted(ps, key=f)
页:
[1]