我有一个不同人的数据帧。每一行都包含描述个人特征的属性。基本上,我需要一个过滤器或匹配算法加权特定的属性。数据帧如下所示:
df= pd.DataFrame({
'sex' : [m,f,m,f,m,f],
'food' : [0,0,1,3,4,3],
'age': [young, young, young, old, young, young]
'kitchen': [0,1,2,0,1,2],
})
数据帧df
如下所示:
我正在寻找一个算法,该算法将数据帧中的所有人分组为对。我的计划是根据以下属性找到两个人的配对:
一个人必须有厨房(厨房=1)
重要的是至少有一个人有厨房。在
厨房=0-->人没有厨房
厨房=1-->人有厨房
厨房=2-->;人员有厨房,但只有在紧急情况下(没有其他选择时)
相同的食物偏好
食物=0-->肉食者
食物=1——无所谓
食物=2-->素食主义者
食物=3-->素食
肉食者(food=0)可以与不在乎食物偏好(food=1)但不能与素食主义者或素食者匹配的人匹配。素食主义者(食物=2)最适合素食主义者(食物=3),如果有必要,可以搭配食物=1。等等。。。
相似年龄
有9个年龄组:10-18;18-22;22-26;26-29,29-34;34-40;40-45;45-55和55-75。同一年龄组的人完全匹配。年轻的年龄组和较大的年龄组不太匹配。相似年龄段的人比较匹配。没有明确规定的条件。“老”和“年轻”的含义是相对的。
性别不重要。有许多对组合可能。因为我的实际数据帧很长(3000行),我需要找到一个自动化的解决方案。一个解决方案,它给了我数据帧、字典或其他东西中的最佳对。在
我真的不知道如何处理这个问题。我正在寻找堆栈溢出的类似问题,但我没有找到任何合适的。基本上,这只是太理论化了。我也找不到真正适合我问题的东西。在
我在这里的预期输出是,例如一个字典(不确定如何)或一个数据帧,它的排序方式是每两行可以看作一对。在
背景:目标是结对参加一些业余活动。所以我认为,相同或相似年龄组的人有着相同的兴趣,所以我想在我的代码中考虑这个事实。在
我做了一个加法,把
'name'
作为一个键来识别这个人。在接近
方法是,我对值进行评分,然后根据给定的条件进一步用于筛选最终对。在
厨房计分
我们使用的厨房评分:
厨房if条件逻辑
我们检查是否[记录1的厨房得分]+[记录2的厨房得分]大于零。将出现以下情况:
食物得分
我们使用的食物分数:
食品的if条件逻辑
我们检查*[记录1的食物分数]*[记录2的食物分数]*是否大于或等于到零。将出现以下情况:
年龄组得分
为了对年龄组进行评分,我们将一些值分配给这些组,如下所示:
年龄分数计算
计算年龄分数时使用了以下公式:
age_score = round((1 - (abs(Age Group Value Person 1 - Age Group Value of Person 2) / 10)), 2)
在上述公式中,我们计算如下:
案例如下:
round(1 - (abs(2 - 2) / 10), 2) = 1.0
round(1 - (abs(8 - 8) / 10), 2) = 1.0
round(1 - (abs(2 - 8) / 10), 2) = 0.4
round(1 - (abs(1 - 9) / 10), 2) = 0.2
最终得分计算
在计算最终得分时,我们使用了:
Final Score = Food Score + Kitchen Score + Age Score
然后对最终得分的数据进行排序,得到最佳对。在
解决方案代码
带分数的输入/中间数据帧
^{pr2}$输出
这个解决方案还有进一步的优化范围。在
好吧,让我们测试一下厨房。在
好吧,现在我们已经在有厨房的人的家里找到了厨房,让我们找到没有厨房的人有相似的食物偏好。让我们创建一个变量来告诉我们有多少人有一个厨房(x)。我们也让person变量用于计算人数。在
^{pr2}$我现在正在做年龄调整
这对我来说是个很有趣的问题。有几种方法可以解决这个问题。我将向您陈述一个,但会将您链接到another solution,我觉得这是某种关联。在
一种可能的方法是在dataframe中创建一个额外的列,包括引用给定属性的“code”。例如:
这个“代码”是由你的属性组成的。因为性别无关紧要,代码中的第一个符号代表“食物”,第二个符号代表“年龄”,第三个符号代表“厨房”。在
^{pr2}$根据这些代码,你可以想出一个模式。我建议您为此使用Regular Expressions。你可以这样写:
基于此,您可以对条目进行循环,并按您的需要将它们组合在一起。可能有一个更简单的解决方案,我没有验证代码,但这只是我想到的。有一点是肯定的:使用正则表达式进行匹配。
相关问题 更多 >
编程相关推荐