有趣的python实践案例(四)--- pandas库匹配一周cp

wo们出python基础啦系列(一)—数据类型
wo们出python基础啦系列(二)—条件判断
wo们出python基础啦(三)—if循环语句
wo们出python基础啦(四)—while循环语句
有趣的python实践案例(一)—获取WiFi密码+动态二维码
有趣的python实践案例(二)—turtle库绘画案例
有趣的python实践案例(三)—PubMed搜索小工具二创
有趣的python实践案例(四)— pandas库匹配一周cp

前言

大家对于一周cp这个活动应该还都不太陌生吧,今年的活动应该进行到了第五天了,不知道大家对匹配的cp是否满意呢!

奇趣多多的朋友们也参加了此次线上匹配活动,但是对于匹配的结果(仅仅考虑身高体重这样的硬条件来说)依旧不太满意,所以奇趣多多准备亲自出手,打造一个基于pandas库的精确匹配系统

系统思路

在这里插入图片描述
针对我们的系统思路,奇趣多多又模拟了一份匹配数据(仅仅考虑身高和体重的匹配)如下图。在这里插入图片描述

数据预处理

考虑到填入的身高,体重,期望身高,期望体重均为数值,因此我们决定将这四类数据统一做一个归一化处理以减小处理难度

import pandas as pd
import numpy as np
filepath = r'C:\Users\15643\Desktop\data_row.xls'
df = pd.read_excel(filepath)
#数据预处理归一化
df['性别']=df['性别'].apply(lambda x:2 if x=='男' else 1)
std_num_h=np.arange(140,200,5)
std_num_w=np.arange(40,105,5)
for h in std_num_h:   
    df['身高']=df['身高'].apply(lambda x:h if abs(x-h)<3 else x)
    df['期待身高']=df['期待身高'].apply(lambda x:h if abs(x-h)<3 else x)
for w in std_num_w:
    df['体重']=df['体重'].apply(lambda x:w if abs(x-w)<3 else x)
    df['期待体重']=df['期待体重'].apply(lambda x:w if abs(x-w)<3 else x)

我们将所有身高近似归为【150,155,160,165,170,175,180,185,190,195】

所有体重近似归为【40,45,50,55,60,65,70,75,80,85,90,95,100】
在这里插入图片描述

数据匹配

判别1—判断男女之间身高体重能否完全匹配
#筛选阶段1--身高+体重
for i in range(len(df)):
    h_e = df.iloc[i,4]
    w_e = df.iloc[i,5]
    d1 = df[(df['体重']==w_e) & (df['身高']==h_e)]
    if len(d1)>=1 and int(d1['性别'])!=int(df.iloc[i,1]):
        print('编号为{}和{}可以匹配'.format(int(d1['编号']),i+1))
    else:
        print('没有完全匹配')

在这里插入图片描述

判别2—判断男女之间身高体重能否部分匹配
#筛选阶段2---体重
for i in range(len(df)):
    w_e = df.iloc[i,5]
    d1 = df.loc[df['体重']==w_e]
    if len(d1)>=1 and int(d1['性别'])!=int(df.iloc[i,1]):
        print('编号为{}和{}可以匹配体重'.format(int(d1['编号']),i+1))  

在这里插入图片描述

#筛选阶段3---身高
for i in range(len(df)):
    h_e = df.iloc[i,4]
    d1 = df.loc[df['身高']==h_e]
    if len(d1)==1 and int(d1['性别'])!=int(df.iloc[i,1]):
        print('编号为{}和{}可以匹配身高'.format(int(d1['编号']),i+1))
    if len(d1)>1:
        female = d1[d1['性别']==1]
        male = d1[d1['性别']==2]
        print('编号为{}和{}可以匹配身高'.format(list(female['编号']),list(male['编号'])))       

在这里插入图片描述
你们的关注给了我们继续的动力!
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佩瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值