merge合并DataFrame

import pandas as pdleft=pd.DataFrame({'key':['k0','k1','k2','k3','k4','k5'],'A':['A0','A1','A2','A3','A4','A5'],'B':['B0','B1','B2','B3','B4','B5']
})right=pd.DataFrame({'key':['k0','k1','k2','k3','k4','k5'],'C':['C0','C1','C2','C3','C4','C5'],'D':['D0','D1','D2','D3','D4','D5']
})
print(left)
print('-'*20)
print(right)
  key   A   B
0  k0  A0  B0
1  k1  A1  B1
2  k2  A2  B2
3  k3  A3  B3
4  k4  A4  B4
5  k5  A5  B5
--------------------key   C   D
0  k0  C0  D0
1  k1  C1  D1
2  k2  C2  D2
3  k3  C3  D3
4  k4  C4  D4
5  k5  C5  D5
# 合并
res=pd.merge(left,right)
print(res)print('-'*20)
# 指定合并的key
res=pd.merge(left,right,on='key')
print(res)
  key   A   B   C   D
0  k0  A0  B0  C0  D0
1  k1  A1  B1  C1  D1
2  k2  A2  B2  C2  D2
3  k3  A3  B3  C3  D3
4  k4  A4  B4  C4  D4
5  k5  A5  B5  C5  D5
--------------------key   A   B   C   D
0  k0  A0  B0  C0  D0
1  k1  A1  B1  C1  D1
2  k2  A2  B2  C2  D2
3  k3  A3  B3  C3  D3
4  k4  A4  B4  C4  D4
5  k5  A5  B5  C5  D5
left = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],'key2': ['K0', 'K1', 'K2', 'K3'],'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],'key2': ['K0', 'K1', 'K2', 'K4'],'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print('-'*20)
print(right)
  key1 key2   A   B
0   K0   K0  A0  B0
1   K1   K1  A1  B1
2   K2   K2  A2  B2
3   K3   K3  A3  B3
--------------------key1 key2   C   D
0   K0   K0  C0  D0
1   K1   K1  C1  D1
2   K2   K2  C2  D2
3   K3   K4  C3  D3
# 默认取交集 how='inner'
res=pd.merge(left,right,on=['key1','key2'])
print(res)
  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K1  A1  B1  C1  D1
2   K2   K2  A2  B2  C2  D2
# how='outer' 取并集
res=pd.merge(left,right,on=['key1','key2'],how='outer')
print(res)
  key1 key2    A    B    C    D
0   K0   K0   A0   B0   C0   D0
1   K1   K1   A1   B1   C1   D1
2   K2   K2   A2   B2   C2   D2
3   K3   K3   A3   B3  NaN  NaN
4   K3   K4  NaN  NaN   C3   D3
# 显示合并数据中数据来自哪个表
res=pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True)
print(res)
  key1 key2    A    B    C    D      _merge
0   K0   K0   A0   B0   C0   D0        both
1   K1   K1   A1   B1   C1   D1        both
2   K2   K2   A2   B2   C2   D2        both
3   K3   K3   A3   B3  NaN  NaN   left_only
4   K3   K4  NaN  NaN   C3   D3  right_only
# 左链接
res=pd.merge(left,right,on=['key1','key2'],how='left')
print(res)
print('-'*30)
# 右链接
res=pd.merge(left,right,on=['key1','key2'],how='right')
print(res)
  key1 key2   A   B    C    D
0   K0   K0  A0  B0   C0   D0
1   K1   K1  A1  B1   C1   D1
2   K2   K2  A2  B2   C2   D2
3   K3   K3  A3  B3  NaN  NaN
------------------------------key1 key2    A    B   C   D
0   K0   K0   A0   B0  C0  D0
1   K1   K1   A1   B1  C1  D1
2   K2   K2   A2   B2  C2  D2
3   K3   K4  NaN  NaN  C3  D3

join 拼接列,主要用于索引上的合并

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3'],'key': ['K0', 'K1', 'K0', 'K1']})right = pd.DataFrame({'C': ['C0', 'C1'],'D': ['D0', 'D1']},index=['K0', 'K1'])print(left)
print('-'*15)
print(right)
    A   B key
0  A0  B0  K0
1  A1  B1  K1
2  A2  B2  K0
3  A3  B3  K1
---------------C   D
K0  C0  D0
K1  C1  D1
res=left.join(right,on='key')
print(res)
    A   B key   C   D
0  A0  B0  K0  C0  D0
1  A1  B1  K1  C1  D1
2  A2  B2  K0  C0  D0
3  A3  B3  K1  C1  D1

Pandas数据透视表

df = pd.DataFrame({'Month': ["January", "January", "January", "January", "February", "February", "February", "February", "March", "March", "March", "March"],'Category': ["Transportation", "Grocery", "Household", "Entertainment","Transportation", "Grocery", "Household", "Entertainment","Transportation", "Grocery", "Household", "Entertainment"],'Amount': [74., 235., 175., 100., 115., 240., 225., 125., 90., 260., 200., 120.]})
print(df)
       Month        Category  Amount
0    January  Transportation    74.0
1    January         Grocery   235.0
2    January       Household   175.0
3    January   Entertainment   100.0
4   February  Transportation   115.0
5   February         Grocery   240.0
6   February       Household   225.0
7   February   Entertainment   125.0
8      March  Transportation    90.0
9      March         Grocery   260.0
10     March       Household   200.0
11     March   Entertainment   120.0
# 构造一个索引为Category 列为Month 值为Amount的表
res=df.pivot(index='Category',columns='Month',values='Amount')
print(res)
Month           February  January  March
Category
Entertainment      125.0    100.0  120.0
Grocery            240.0    235.0  260.0
Household          225.0    175.0  200.0
Transportation     115.0     74.0   90.0
# 按列求和
res.sum(axis=0)
Month
February    705.0
January     584.0
March       670.0
dtype: float64
# 按行求和
res.sum(axis=1)
Category
Entertainment     345.0
Grocery           735.0
Household         600.0
Transportation    279.0
dtype: float64

pivot_table

df=pd.read_csv('./pandas/data/titanic.csv')
df.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp','Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],dtype='object')
#默认求平均值
res=df.pivot_table(index='Sex',columns='Pclass',values='Fare')
print(res)
Pclass           1          2          3
Sex
female  106.125798  21.970121  16.118810
male     67.226127  19.741782  12.661633
# 求最大值
res=df.pivot_table(index='Sex',columns='Pclass',values='Fare',aggfunc='max')
print(res)
Pclass         1     2      3
Sex
female  512.3292  65.0  69.55
male    512.3292  73.5  69.55
# 统计个数
res=df.pivot_table(index='Sex',columns='Pclass',values='Fare',aggfunc='count')
print(res)
print('-'*20)
# crosstab 统计个数
res=pd.crosstab(index=df['Sex'],columns=df['Pclass'])
print(res)
Pclass    1    2    3
Sex
female   94   76  144
male    122  108  347
--------------------
Pclass    1    2    3
Sex
female   94   76  144
male    122  108  347
# 求平均值
res=df.pivot_table(index='Sex',columns='Pclass',values='Fare',aggfunc='mean')
print(res)
Pclass           1          2          3
Sex
female  106.125798  21.970121  16.118810
male     67.226127  19.741782  12.661633
# 计算未成年男女存活率
df['minor']=df['Age']<=18
res=df.pivot_table(index='minor',columns='Sex',values='Survived',aggfunc='mean')
print(res)
Sex      female      male
minor
False  0.760163  0.167984
True   0.676471  0.338028

Pandas入门教程(二)相关推荐

  1. python使用教程pandas-十分钟搞定pandas(入门教程)

    本文是对pandas官方网站上<10Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯上 ...

  2. python使用教程pandas-Python 数据处理库 pandas 入门教程基本操作

    pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有表现力的数据结 ...

  3. python elasticsearch 入门教程(二) ---全文搜索

    python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...

  4. R语言七天入门教程二:认识变量与运算符

    R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...

  5. (转)tensorflow入门教程(二十六)人脸识别(上)

    https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...

  6. Android WebRTC 入门教程(二) -- 模拟p2p本地视频传输

    Android WebRTC 入门教程(一) – 使用相机 Android WebRTC 入门教程(二) – 模拟p2p本地视频传输 源码工程: https://github.com/LillteZh ...

  7. LittleVGL (LVGL)干货入门教程二之LVGL的输入设备(indev)API对接。

    LittleVGL (LVGL)干货入门教程二之LVGL的输入设备(indev)API对接 前言: 阅读前,请确保你拥有以下条件: 你已经完成"显示API"的移植. 你已经实现了一 ...

  8. c语言类似于 n的标识符,C语言快速入门教程(二)

    C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...

  9. 微信小程序云开发 初学者入门教程二

    微信小程序云开发 初学者入门教程二-前端操作数据库模块 如何操作数据库,作为一名前端,如果对数据的知识不够熟悉也没关系,从现在开始好好学习就行,数据库的操作内容差不多涉及增删改查四大模块,花一些业余的 ...

最新文章

  1. 2017,AI偏见为何如此受关注?
  2. Solr Facet(分片)
  3. 更换mysql_这些被你忽视的MySQL细节,可能会让你丢饭碗!
  4. Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)
  5. redis value最大值_Redis基础知识整理
  6. e-Learning案例分享(一)
  7. 使用C#的泛型队列Queue实现生产消费模式
  8. Twitter数据抓取的方法(一)
  9. npm 安装axios报错
  10. 数字信号处理实验(五)—— 心电信号处理 IIR FIR滤波综合题(上篇)
  11. 非因解读 | Multiplex immunofluorescnece-多重免疫荧光结合单细胞蛋白组技术探索肿瘤微环境
  12. 牛客 数据库SQL实战 将titles_test表名修改为titles_2017
  13. UOJ #141. 【UER #4】量子态的棋盘
  14. 谷粒商城项目篇8_分布式高级篇_商城首页、性能压测、优化(Nginx动静分离)
  15. android手机系统对比,国产手机系统哪家强?几大主流手机系统盘点对比
  16. 代数结构入门:群、环、域、向量空间
  17. 0xc000007b应用程序无法正常启动解决方案(亲测有效)
  18. 《科技创业启示录》一第2章 克里斯·巴顿、菲利普·安格布瑞希、迪拉伊·慕克吉、艾弗里·王 科技创业启示录...
  19. pandas 数据怎样实现行间计算
  20. numpy 中ravel()和flatten()区别

热门文章

  1. java的继承和访问_Java基础篇:如何解决成员的访问和继承?
  2. [Python] L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT
  3. 对于新安装的MySQL如何提升MySQL的安全级别
  4. 推荐一款思维在线思维导图,为什么?
  5. java反编译工具jd-gui
  6. Bzoj14981416: [NOI2006]神奇的口袋
  7. CUDA学习(九十七)
  8. Android--Activity的跳转及Activity之间的数据传递
  9. koa2+koa-views示例
  10. ORA-01403: no data found