笛卡儿积扩展

  • 问题说明:
  • 笛卡儿积形象图
  • Mysql的笛卡尔积实现方案
  • python 的笛卡儿积实现(一)
  • python 的笛卡儿积实现(二)

问题说明:

我需要在python中扩展数据框中的每一行并拼接一个数据框
Example:
我现在有两个表(表A,表B)如下:
(表A:学生信息表)

姓名 学号
A 1
B 2
C 3
D 4

(表B:课程信息表)

课程名称 是否需要考试
语文 需要
数学 需要
外语 需要
手工 不需要

对于一个班的学生来说,哪个课程需不需要考试肯定是对所有同学来说的
所以最后我想把表A的每条信息都复制成4条,把表B整个复制四份,直接拼在A的右边
如下图所示,最终输出中间部分(这就是SQL中常说的笛卡儿积运算):

笛卡儿积形象图

Mysql的笛卡尔积实现方案

mysql> select * from student_info,course_info -> order by student_name,course;
+--------------+-------------+--------+--------+
| student_name | student_num | course | exam   |
+--------------+-------------+--------+--------+
| A            | 1           | 外语   | 需要   |
| A            | 1           | 手工   | 不需要 |
| A            | 1           | 数学   | 需要   |
| A            | 1           | 语文   | 需要   |
| B            | 2           | 外语   | 需要   |
| B            | 2           | 手工   | 不需要 |
| B            | 2           | 数学   | 需要   |
| B            | 2           | 语文   | 需要   |
| C            | 3           | 外语   | 需要   |
| C            | 3           | 手工   | 不需要 |
| C            | 3           | 数学   | 需要   |
| C            | 3           | 语文   | 需要   |
| D            | 4           | 外语   | 需要   |
| D            | 4           | 手工   | 不需要 |
| D            | 4           | 数学   | 需要   |
| D            | 4           | 语文   | 需要   |
+--------------+-------------+--------+--------+

python 的笛卡儿积实现(一)

import pandas as pd
import numpy as np
#生成测试数据
a = pd.DataFrame({'name':list('ABCD'),'student_num':[i+1 for i in range(4)]})
b = pd.DataFrame({'course':['语文','数学','外语','手工'],'exam':['yes','yes','yes','no']})
#创建一个虚拟密钥并merge合并创建笛卡儿积然后在删除创建的密钥
a.assign(key=1).merge(b.assign(key=1), on='key').drop('key',axis=1)

分步拆解变形:

import pandas as pd
import numpy as np
a = pd.DataFrame({'name':list('ABCD'),'student_num':[i+1 for i in range(4)]})
b = pd.DataFrame({'course':['语文','数学','外语','手工'],'exam':['yes','yes','yes','no']})
#第一步:分别新增相同辅助列
a['key']=1
b['key']=1
#第二步:merge拼接
result=pd.merge(a,b)
#第三步:删除辅助列
result.drop('key',axis=1,inplace=True)

python 的笛卡儿积实现(二)

import pandas as pd
import numpy as np
a = pd.DataFrame({'name':list('ABCD'),'student_num':[i+1 for i in range(4)]})
b = pd.DataFrame({'course':['语文','数学','外语','手工'],'exam':['yes','yes','yes','no']})#按行复制扩展 n倍
def zdy_copy1(data,n):result=pd.DataFrame()for i in range(len(data)):s=data.loc[i]t=pd.DataFrame(s).Tresult=result.append([t]*n)  #每行复制b长度倍result.reset_index(drop=True,inplace=True)return  result
#整体复制扩展 n倍
def zdy_copy2(data,n):result=pd.DataFrame()for i in range(len(a)):result=pd.concat([result,b])result.reset_index(drop=True,inplace=True)return  result
rr1=zdy_copy1(a,len(b))
rr2=zdy_copy2(b,len(a))
pd.concat([rr1,rr2],axis=1)

python的笛卡儿积扩展相关推荐

  1. Python正则表达式之扩展语法(5)

    非捕获组和命名组 精心设计的正则表达式可能会划分很多组,这些组不仅可以匹配相关的子串,还能够对正则表达式本身进行分组和结构化.在复杂的正则表达式中,由于有太多的组,因此通过组的序号来跟踪和使用会变得困 ...

  2. 写python的c扩展简介

    写python的c扩展简介 2012 年 10 月 05 日 isnowfy programGo to comment python是一门非常方便的动态语言,很多你用c或者java要很多行的代码,可能 ...

  3. python程序文件扩展名有_python程序文件的扩展名称是什么

    python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言 ...

  4. python是否安装oracle接口,python安装oracle扩展及数据库连接方法

    本文实例讲述了python安装oracle扩展及数据库连接方法.分享给大家供大家参考,具体如下: 下载: window环境: python27 oracle10 需要软件: cx_Oracle-5.1 ...

  5. python基础-C扩展

    写python的c扩展简介 使用C/C++编写Python模块扩展 Python - 用C扩展编程 使用 C 或 C++ 扩展 Python 原因 添加额外的非python功能. 性能瓶颈的效率提升 ...

  6. Python调用C函数的方法以及如何编写Python的C扩展

    正文共1535个字,2张图,预计阅读时间4分钟. 01 前言 前言属闲聊,正文请转后. 标题比较长,其实"如何用Python调用C的函数"以及"如何编写Python的C扩 ...

  7. python程序的扩展名是perl程序的扩展名是_Python 程序扩展名(py, pyc, pyw, pyo, pyd)及发布程序时的选择...

    扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名.windows下直接双击运行会调用python.ex ...

  8. python官方的扩展库索引是什么_python扩展列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python扩展内容阅读本文需要3分钟? ① python中yield关键字的使 ...

  9. Python使用pypcap扩展包,抓取视频网站的视频URL

    爬取视频网站的视频URL 前言 第一步.安装Python(2.7.13 64位) 第二步.安装Python的扩展包pypcapy==1.1.2 第三步.安装Python的扩展包dpkt(这个没什么特别 ...

最新文章

  1. Linux 基金会宣布红队项目,致力于孵化开源安全工具
  2. Linux学习之CentOS(七)--CentOS下j2ee环境搭建
  3. 十三、熵编码算法(3):CAVLC原理
  4. suse linux 光纤卡重置,SUSE Linux下查看光纤卡号和操作系统的版本
  5. Scikit-learn——train_test_split()方法的功能和使用
  6. 深入浅出之虚函数原理篇(笔记三)
  7. (JAVA)File类
  8. Caffe中如果高效实现卷积层
  9. Linux -Ubuntu安装 Tomcat
  10. go中defer的一个隐藏功能
  11. 如何更改html的默认应用,win10如何修改默认应用
  12. IBM X3650 安装ESXi 5.1u2 需要更改BIOS缺省设置
  13. java实现支付宝app支付
  14. 树莓派外挂ESP32-USB
  15. jupyter修改工作路径提示找不到指定模块
  16. 离婚了我们先同居 (转贴)
  17. 中文地址 识别 切分
  18. python【模块】xml.etree.ElementTree 解析 xml
  19. 什么是trunk端口?
  20. 有监督学习神经网络的回归拟合——基于红外光谱的汽油辛烷值预测(Matlab代码实现)

热门文章

  1. java求因数_java求质因数
  2. ubuntu18.04无法找到wifi适配器解决方案
  3. 进程(上篇):进程与操作系统
  4. SpringBoot中级
  5. ZTree的选择性展开树节点
  6. ztree调用的例子(复选框、checkbox)
  7. 串口软件与uPs测试,单路串口服务器在UPS动环监控解决方案你可了解?
  8. Python爬虫之Scrapy框架系列(16)——深入剖析request和response类
  9. springboot 基于.ftl模板生成pdf文件
  10. 视频加密播放 blob java