pandas merge 和 concat_悦光阴的博客-程序员秘密

技术标签: pandas  python  开发语言  

merge是按照列值或索引值进行连接,concat是按照轴进行拼接。

一,merge

数据库风格的连接是merge,

DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), indicator=False, validate=None)

参数注释:

right:右侧数据集

how:连接的类型,有效值是:{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’},默认值是inner

用于指定连接的字段:

  • on:用于连接的字段,该字段同时存在于左表和右表
  • left_on、right_on:用于指定用于连接的字段
  • left_index、right_index:用于指定用于连接的索引

sort:是否排序

suffixes:元组类型,用于为同名的字段设置后缀 

indicator:如果设置为Ture,则在输出 DataFrame 中添加一个名为“_merge”的列,其中包含有关每行来源的信息;为该参数设置为一个字符串,用于为该列设置名称。该列的有效值是:left_only,right_only和both,分别表示只出现在左表,只出现在右表和两表同时存在。

validate:用于指定关系的类型,有效值是one_to_one,one_to_many,many_to_one和many_to_many

举个例子,有以下两个数据集,

df1 = pd.DataFrame({
     'lkey': ['foo', 'bar', 'baz', 'foo'],
                    'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({
     'rkey': ['foo', 'bar', 'baz', 'foo'],
                    'value': [5, 6, 7, 8]})
df1
    lkey value
0   foo      1
1   bar      2
2   baz      3
3   foo      5
df2
    rkey value
0   foo      5
1   bar      6
2   baz      7
3   foo      8

df1是左表,右表是df2,两表进行inner join,结果如下所示:

df1.merge(df2, left_on='lkey', right_on='rkey')
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        1  foo        8
2  foo        5  foo        5
3  foo        5  foo        8
4  bar        2  bar        6
5  baz        3  baz        7

二,concat

沿特定轴连接DataFrame 或Series

pandas.concat(objs, axis=0, join='outer', ignore_index=False, verify_integrity=False, sort=False)

参数注释:

objs:用于concat的对象列表

axis:沿着哪一个轴,0代表列,1代表行。

join:如何处理其他轴上的索引,有效值是inner和outer,默认值是outer

ignore_index:如果设置为True,那么返回的结果使用默认的索引,即从0到n-1,默认值是False,不忽略原始索引。

创建多级索引(MultiIndex)

  • keys:作为多级索引最外层的索引值
  • levels:如果设置keys参数,那么levels用于指定多级索引的各个级别
  • names:如果设置keys参数,那么names用于指定多级索引各个级别的名称

verify_integrity:用于检查结果集的索引是否有重复

举个例子,两个序列进行拼接,不忽略原始索引。

s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])
pd.concat([s1, s2])
0    a
1    b
0    c
1    d
dtype: object

如果忽略原始索引,那么结果集会生成一个从0到n-1的默认索引:

pd.concat([s1, s2], ignore_index=True)
0    a
1    b
2    c
3    d
dtype: object

在拼接序列时,使用keys参数创建多级索引最外层的一个索引:

pd.concat([s1, s2], keys=['s1', 's2'])
s1  0    a
    1    b
s2  0    c
    1    d
dtype: object

参考文档:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/upluck/article/details/126291188

智能推荐

怎样远程登录服务器并修改自己的用户名口令_龙格的博客-程序员秘密

<br />一、远程登录服务器<br />    “开始”-“所有程序”-“附件”-“通讯”-“远程桌面链接”<br />输入服务器IP地址,点击“连接”,输入用户名和密码即可。<br />二、修改用户名和密码<br />     有三种方法:<br />     1.按ctrl+alt+end键,选择“更改密码”;<br />     2.选择“我的电脑”-右键“管理”-“本地用户和组”-“用户”找到你的那个管理员账号,右键进行设置密码。那个提示windows的一个安全警告,并不影响你的使用。如果你真的担

ctfshow 密码挑战_PUTAOAO的博客-程序员秘密

真·biginner给出了m&lt;&lt;10000十进制的后175位。化为数学公式就是m*2^10000 %10^175=cm= c*2^-10000 mod 10^175m= c*2^-10000 mod 5^175import gmpy2from Crypto.Util.number import *c=1002773875431658367671665822006771085816631054109509173556585546508965236428620487083647585

关于mybatis中collection一对多关联查询分页出错问题总结_xiah锋的博客-程序员秘密

在使用PageHelper+mybatis作为数据分页查询的时候,如果使用了collection进行一对多关联的时候有可能出现分页不正确的问题

Qt ------ QProcess,启动外部进程,进程间通信_dee53994040的博客-程序员秘密

简介:可用于完成启动外部程序,并与之交互通信。启动一个进程的名字叫“program”,如果某进程的路径没有设置成环境变量,“program”需要包含路径如果进程可以接收参数,参数叫“argument”把“program”和“argument”和在一起叫“command”部分方法说明:void QProcess::start(const QString &am...

开关电源主要有小信号与大信号分析两种建模方法_zigzagfist的博客-程序员秘密

<br />1)小信号分析法  主要是状态空间平均法,由美国加里福尼亚理工学院的R.D.Middlebrook于1976年提出,可以说这是电力电子学领域建模分析的第一个真正意义的重大突破。后来出现的如电流注入等效电路法、等效受控源法(该法由我国学者张兴柱于1986年提出)、三端开关器件法等,这些均属于电路平均法的范畴。平均法的缺点是明显的,对信号进行了平均处理而不能有效地进行纹波分析;不能准确地进行稳定性分析;对谐振类变换器可能不大适合;关键的一点是,平均法所得出的模型与开关频率无关,且适用开关电源条件是电

随便推点

linux C/C++服务器后台开发面试题总结——走向专业的必经之路_ytttsam的博客-程序员秘密

一、视频总结篇二、面试题篇1.linux C/C++服务器后台开发面试题总结(编程语言篇)2.linux C/C++服务器后台开发面试题总结(服务器编程篇)3.linux C/C++服务器后台开发面试题总结(liunx操作系统篇)4.linux C/C++服务器后台开发面试题总结(网络编程篇)5.linux C/C++服务器后台开发面试题总结(算法和数据结构篇)6.linux C/C++服务器后台开发面试题总结(系统架构篇)三、技术交流四、大厂面试题及技术电子书分享...

关于使用友盟QQ微信第三方登陆_画个大饼的博客-程序员秘密

最近再次写到第三方登陆,与iOS9以前有了很大的区别了。也遇到了一些小问题,但也成功地解决了。首先你要有友盟的账号(友盟官网)  以及微信开放平台(点击链接)和腾讯开放平台(点击链接) 微信开放平台申请获取到微信AppID及AppSecret,如果需要微信登录功能,需要申请微信登录权限QQ及Qzone使用同一个AppID及Appke,选择移动应用,填写相关应用信息并

autoCAD2014安装激活_谭舜心的博客-程序员秘密

下载注册机系列号:666-69696969(通用)密钥:001F132位系统请运行:xf-adsk32.exe注册机。64位系统请运行:xf-adsk64.exe注册机。注册机点击patch,成功。从CAD2014界面复制申请码到注册机generate复制激活码粘帖到CAD激活码界面激活成功。

Java 知识 03_1 - API -- 工具类/IO流/递归/泛型_书生提刀的博客-程序员秘密

Java 知识 03_1 - API – 工具类/IO流/递归1. API 概述:API:应用程序编程接口;在Java中的API指的就是JDK中提供的各种功能的Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是怎么实现的,只需要会使用就行。2. API 中主要要三大知识点——线程、集合、spring3. API 工具类3.1 学会使用JDK_API_1_6_zh_CN.CHM 字典查法:双击打开后 ➝ 左上角 [显示] ➝ [索引] ➝ 输入想要查询的内容3.2 O

Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)..._weixin_34370347的博客-程序员秘密

Android开发平台中,可通过TelephonyManager 获取本机号码。TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);txtPhoneNumber.setText(phoneMgr.getLine1Number())...

推荐文章

热门文章

相关标签