有趣的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库的精确匹配系统

系统思路

有趣的python实践案例(四)--- pandas库匹配一周cp_第1张图片
针对我们的系统思路,奇趣多多又模拟了一份匹配数据(仅仅考虑身高和体重的匹配)如下图。有趣的python实践案例(四)--- pandas库匹配一周cp_第2张图片

数据预处理

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

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】
有趣的python实践案例(四)--- pandas库匹配一周cp_第3张图片

数据匹配

判别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('没有完全匹配')

有趣的python实践案例(四)--- pandas库匹配一周cp_第4张图片

判别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))  

有趣的python实践案例(四)--- pandas库匹配一周cp_第5张图片

#筛选阶段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['编号'])))       

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

你可能感兴趣的:(python基础,python,编程语言)