我不是第一个 发表于 2022-12-2 19:47:55

多属性数据排序问题

假如我有100组数据需要排序:   
它们共有的属性

体重:               占比 10%   重的优先
身高:               占比 15%   高的优先
姓氏:               占比 10%   赵钱孙李周吴郑    优先顺序
上网时长:          占比 30%   长的优先
年纪:                占比 15%    大的优先
学历:                占比 20%    高的优先


有没有py库可以计算它们的综合数据大小进行排序,或者有什么算法可以计算。
谢谢。{:5_109:}

tommyyu 发表于 2022-12-2 20:25:06

可以通过sorted函数进行排序,确定其中的key参数

我不是第一个 发表于 2022-12-2 20:42:51

tommyyu 发表于 2022-12-2 20:25
可以通过sorted函数进行排序,确定其中的key参数

sorted我只用过同属性值相比较,复杂点的不知道咋用。我想计算综合得分值进行比较,不知道行不行。

tommyyu 发表于 2022-12-2 20:47:11

我不是第一个 发表于 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
>>>

gywjj 发表于 2022-12-2 21:53:06

估计只有单独弄循环,然后将每个值乘占比最后加起来再排序吧,这个规则都是你自己在写,肯定是没有现存的。把数据读到pandas然后为每一种属性排序加列算出占比得分,最后把这些分加起来,再排序。

我不是第一个 发表于 2022-12-2 22:37:37

gywjj 发表于 2022-12-2 21:53
估计只有单独弄循环,然后将每个值乘占比最后加起来再排序吧,这个规则都是你自己在写,肯定是没有现存的。 ...

大概已经弄出来了。每组不同属性的值差距是很大的,核心主要是要算出单个属性比分,对综合比分影响不大才行。

我不是第一个 发表于 2022-12-2 22:38:30

tommyyu 发表于 2022-12-2 20:47
你可以参考一下这个例子

谢谢给的代码,有启发。估计搞成了。

阿奇_o 发表于 2022-12-2 22:59:13

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]
查看完整版本: 多属性数据排序问题