当前位置: 首页 > news >正文

pandas数据分析35——多个数据框实现笛卡尔积

什么是笛卡尔积。就是遍历所有组合的可能性。

比如第一个盒子有[1,2,3]三个号码球,第二个盒子有[4,5]两个号码球。那么从每个盒子里面分别拿一个球共有3*2两种可能性,其集合就是{[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]},这个就是笛卡尔积。

三个盒子也是一样,比如第三个盒子有[6,7,8]个球,那么共有3*2*3,18种可能性。这些可能性的集合就是笛卡尔积。

先举一个pandas里面的例子,两个数据框,每行每行组合:

import pandas as pd
import numpy as npdf1 = pd.DataFrame({"a":[1,2],"b":[3,4]})
df2 = pd.DataFrame({"c":[11,22],"d":[33,44],"e":[55,66]})df1['value']=1
df2['value']=1
df3 = df1.merge(df2,how='left',on='value')
del df3['value']df3

 相当于df1和df2每行都进行两两组合:​df1的第一行配上df2 的第一行,df1的第一行配上df2 的第二行,df1的第二行配上df2 的第一行,df1的第二行配上df2 的第二行。

所以其笛卡尔积df3就是四行。


学生课程案例

那上面这个笛卡尔积有什么用?

举个例子,比如我有两个表:

df_student

 上面这个是学生信息表,还有一个课程表:

df_course

 我想准备生成一个新的数据框,包括所有学生的 所有课程的 成绩。

那么就应该有12(学生数量)*10(课程数量)条数据。

可以用下面这个方法实现:(其实是新增了temp一列当做临时键,合并完再删掉)

#笛卡尔积
df_stu_cour=pd.merge(df_student[['# ID','name']].assign(temp=1),df_course.assign(temp=1),on='temp',how='left').drop(columns=['temp'])
df_stu_cour

 这样就生成了笛卡尔积的表,120条没问题,ID_x是学生的ID,ID_y是课程的ID。

此时每个学生考每门课的成绩填到后面就行。


如果我已经有他们对应的每个学生每门课的成绩分数表,但是不是名字和课程名字,而是学生ID和课程ID,那我需要和刚刚做出来的表进行合并怎么办呢?

先查看我的分数表:

df_score

 合并,安装学生ID和课程ID两个关键词合并:

df_stu_cour.merge(df_score,left_on=['# ID_x','# ID_y'],right_on=['# s_id','c_id'],how='outer').tail(30)

 我采用的是并集合并,所以一定有120条,如果分数表里面没有的学生的课程分数,就会是NAN空值。

http://www.lryc.cn/news/4411.html

相关文章:

  • 【C语言学习笔记】:数组倒序排列,数组倒置
  • sni+tomcat漏洞复现
  • Linux ALSA 之十:ALSA ASOC Machine Driver
  • Spring 面试题(一):Spring 如何处理全局异常?
  • Threadlocal为何引发内存泄漏问题
  • 如何写好 Python 的 Lambda 函数?
  • 大数据技术架构(组件)32——Spark:Spark SQL--Execute Engine
  • Leetcode.1138 字母板上的路径
  • 一个自动配置 opengrok 多项目的脚本
  • JAVA同步代码块 同步方法
  • 分享111个助理类简历模板,总有一款适合您
  • Allegro如何更改临时高亮的颜色设置操作指导
  • 知识图谱嵌入技术研究综述
  • Scratch少儿编程案例-水果忍者-超完整
  • 练 习
  • Urho3D整体结构
  • 大数据技术之Hudi
  • libxlsxwriter条件格式
  • nodejs+vue+elementui在线求助系统vscode
  • 电子技术——BJT差分输入对
  • [MySQL教程②] - MySQL介绍和发展史
  • 多表查询--实例
  • Differentially Private Grids for Geospatial Data
  • Java学习记录day8
  • Solon2 开发之容器,三、注入或手动获取 Bean
  • 微信小程序_调用openAi搭建虚拟伙伴聊天
  • 硬件工程师入门基础知识(一)基础元器件认识(一)
  • TCP的运输连接管理
  • 地级市用电、用水、用气数据指标
  • 安装deepinlinuxV20.8配置docker和vscode开发c语言