详解利用Pandas求解两个DataFrame的差集,交集,并集

目录
  • 模拟数据
  • 差集
    • 方法1:concat + drop_duplicates
    • 方法2:append + drop_duplicates
  • 交集
    • 方法1:merge
    • 方法2:concat + duplicated + loc
    • 方法3:concat + groupby + query
  • 并集
    • 方法1:concat + drop_duplicates
    • 方法2:append + drop_duplicates
    • 方法3:merge

大家好,我是Peter~

本文讲解的是如何利用Pandas函数求解两个DataFrame的差集、交集、并集。

模拟数据

模拟一份简单的数据:

In [1]:

import pandas as pd

In [2]:

df1 = pd.DataFrame({"col1":[1,2,3,4,5],
                    "col2":[6,7,8,9,10]
                   })

df2 = pd.DataFrame({"col1":[1,3,7],
                    "col2":[6,8,10]
                   })

In [3]:

df1

Out[3]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10

In [4]:

df2

Out[4]:

  col1 col2
0 1 6
1 3 8
2 7 10

两个DataFrame的相同部分:

差集

方法1:concat + drop_duplicates

In [5]:

df3 = pd.concat([df1,df2])
df3

Out[5]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
0 1 6
1 3 8
2 7 10

In [6]:

# 结果1

df3.drop_duplicates(["col1","col2"],keep=False)

Out[6]:

  col1 col2
1 2 7
3 4 9
4 5 10
2 7 10

方法2:append + drop_duplicates

In [7]:

df4 = df1.append(df2)
df4

Out[7]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
0 1 6
1 3 8
2 7 10

In [8]:

# 结果2

df4.drop_duplicates(["col1","col2"],keep=False)

Out[8]:

  col1 col2
1 2 7
3 4 9
4 5 10
2 7 10

交集

方法1:merge

In [9]:

# 结果

# 等效:df5 = pd.merge(df1, df2, how="inner")
df5 = pd.merge(df1,df2)

df5

Out[9]:

  col1 col2
0 1 6
1 3 8

方法2:concat + duplicated + loc

In [10]:

df6 = pd.concat([df1,df2])
df6

Out[10]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
0 1 6
1 3 8
2 7 10

In [11]:

s = df6.duplicated(subset=['col1','col2'], keep='first')
s

Out[11]:

0    False
1    False
2    False
3    False
4    False
0     True
1     True
2    False
dtype: bool

In [12]:

# 结果
df8 = df6.loc[s == True]
df8

Out[12]:

  col1 col2
0 1 6
1 3 8

方法3:concat + groupby + query

In [13]:

# df6 = pd.concat([df1,df2])

df6

Out[13]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
0 1 6
1 3 8
2 7 10

In [14]:

df9 = df6.groupby(["col1", "col2"]).size().reset_index()
df9.columns = ["col1", "col2", "count"]

df9

Out[14]:

  col1 col2 count
0 1 6 2
1 2 7 1
2 3 8 2
3 4 9 1
4 5 10 1
5 7 10 1

In [15]:

df10 = df9.query("count > 1")[["col1", "col2"]]
df10

Out[15]:

  col1 col2
0 1 6
2 3 8

并集

方法1:concat + drop_duplicates

In [16]:

df11 = pd.concat([df1,df2])
df11

Out[16]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
0 1 6
1 3 8
2 7 10

In [17]:

# 结果

# df12 = df11.drop_duplicates(subset=["col1","col2"],keep="last")
df12 = df11.drop_duplicates(subset=["col1","col2"],keep="first")
df12

Out[17]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
2 7 10

方法2:append + drop_duplicates

In [18]:

df13 = df1.append(df2)

# df13.drop_duplicates(subset=["col1","col2"],keep="last")
df13.drop_duplicates(subset=["col1","col2"],keep="first")

Out[18]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
2 7 10

方法3:merge

In [19]:

pd.merge(df1,df2,how="outer")

Out[19]:

  col1 col2
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
5 7 10

以上就是详解利用Pandas求解两个DataFrame的差集,交集,并集的详细内容,更多关于Pandas DataFrame差集 交集 并集的资料请关注我们其它相关文章!

(0)

相关推荐

  • pandas DataFrame 交集并集补集的实现

    1.场景,对于colums都相同的dataframe做过滤的时候 例如: df1 = DataFrame([['a', 10, '男'], ['b', 11, '男'], ['c', 11, '女'], ['a', 10, '女'], ['c', 11, '男']], columns=['name', 'age', 'sex']) df2 = DataFrame([['a', 10, '男'], ['b', 11, '女']], columns=['name', 'age', 'sex']) 取

  • Pandas自定义shift与DataFrame求差集的小技巧

    目录 Pandas的高级shift偏移 Datafream对象求差集 总结 大家好,我是小小明.今天分享两个小技巧: Pandas的高级shift偏移 有很多玩量化的朋友经常碰到类似这样的问题: 其中有位量化大佬居然在半年后的今天又问了我一遍怎么实现这样的效果,他居然忘了我之前给他写过实现.为了避免有人再碰到类似的问题,特别写下此文. 我们知道Pandas默认的API是不支持这样的操作的,这个只能自己想办法实现.下面我借助数值索引实现这样的功能,并封装起来. 最终我们封装的方法如下: impor

  • Pandas的DataFrame如何做交集,并集,差集与对称差集

    目录 一.简介 二.交集 三.并集 四.差集 五.对称差集 一.简介 Python的数据类型集合:由不同元素组成的集合,集合中是一组无序排列的可 Hash 的值(不可变类型),可以作为字典的Key Pandas中的DataFrame:DataFrame是一个表格型的数据结构,可以理解为带有标签的二维数组. 常用的集合操作如下图所示: 二.交集 pandas的 merge 功能默认为 inner 连接,可以实现取交集 集合 set 可以直接用 & 取交集 import pandas as pd p

  • Pandas中两个dataframe的交集和差集的示例代码

    创建测试数据: import pandas as pd import numpy as np #Create a DataFrame df1 = { 'Subject':['semester1','semester2','semester3','semester4','semester1', 'semester2','semester3'], 'Score':[62,47,55,74,31,77,85]} df2 = { 'Subject':['semester1','semester2','s

  • Pandas DataFrame求差集的示例代码

    在Pandas中 求差集没有专门的函数.处理办法就是将两个DataFrame追加合并,然后去重. divident.append(hasThisYearDivident) noHasThisYearDivident = divident.drop_duplicates(subset='ts_code', keep=False, inplace=True, ignore_index=True) 具体函数用法: https://pandas.pydata.org/pandas-docs/stable

  • 详解利用Pandas求解两个DataFrame的差集,交集,并集

    目录 模拟数据 差集 方法1:concat + drop_duplicates 方法2:append + drop_duplicates 交集 方法1:merge 方法2:concat + duplicated + loc 方法3:concat + groupby + query 并集 方法1:concat + drop_duplicates 方法2:append + drop_duplicates 方法3:merge 大家好,我是Peter~ 本文讲解的是如何利用Pandas函数求解两个Dat

  • 利用Pandas求两个dataframe差集的过程详解

    目录 1.交集 2.差集(df1-df2为例) 总结 1.交集 intersected=pd.merge(df1,df2,how='inner') 延伸(针对列求交集)intersected=pd.merge(df1,df2,on['name'],how='inner') 2.差集(df1-df2为例) diff=pd.concat([df1,df2,df2]).drop_duplicates(keep=False) 差集函数的详解: 1.Pandas 通过 concat() 函数能够轻松地将

  • 详解Python3 pandas.merge用法

    摘要 数据分析与建模的时候大部分时间在数据准备上,包括对数据的加载.清理.转换以及重塑.pandas提供了一组高级的.灵活的.高效的核心函数,能够轻松的将数据规整化.这节主要对pandas合并数据集的merge函数进行详解.(用过SQL或其他关系型数据库的可能会对这个方法比较熟悉.)码字不易,喜欢请点赞!!! 1.merge函数的参数一览表 2.创建两个DataFrame 3.pd.merge()方法设置连接字段. 默认参数how是inner内连接,并且会按照相同的字段key进行合并,即等价于o

  • 详解C++ 多态的两种形式(静态、动态)

    1.多态的概念与分类 多态(Polymorphisn)是面向对象程序设计(OOP)的一个重要特征.多态字面意思为多种状态.在面向对象语言中,一个接口,多种实现即为多态.C++中的多态性具体体现在编译和运行两个阶段.编译时多态是静态多态,在编译时就可以确定使用的接口.运行时多态是动态多态,具体引用的接口在运行时才能确定. 静态多态和动态多态的区别其实只是在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定的.静态多态是指在编译期间就可以确定函数的调用地址,

  • 详解JavaScript中任意两数加减的解决方案

    目录 写在前面 分析填坑思路 解决整数加减的坑 转换科学计算 解决整数减法的坑 解决小数加法的坑 解决小数减法的坑 解决整数加小数的通用问题 总结 写在前面 本文是从初步解决到最终解决的思路,文章篇幅较长 虽然是一篇从0开始的文章,中间的思维跳跃可能比较大 代码的解析都在文章的思路分析和注释里,全文会帮助理解的几个关键词 1.Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 2.15长度的字符串 3.padStart 和 padEnd 分析填坑思

  • 详解利用Flutter中的Canvas绘制有趣的图形

    目录 简介 等边三角形构建重复之美 绘制彩虹 绘制五角星 总结 简介 上一篇我们介绍了使用 Flutter 的 Canvas 绘制基本图形的示例,简单的示例没什么好玩的,今天这一篇我们来点有趣的,我们会完成如下图形的绘制: 发现数学重复之美:使用等边三角形组合成彩虹伞面. 绘制彩虹. 绘制评分用的五角星. 通过这一篇,我们可以知道自定义形状绘制的基本原理,然后可以在这个基础上绘制你自己想要绘制的图形. 等边三角形构建重复之美 首先我们来绘制等边三角形,其实上一篇我们也有绘制等边三角形,只是那是将

  • 详解PHP如何在两个大文件中找出相同记录

    目录 1.引言 2.思路 3.实操 4.生成测试文件 5.分割文件 6.查找重复记录 7.完整代码 1.引言 给定a,b两个文件, 分别有x,y行数据, 其中(x, y均大于10亿), 机器内存限制100M,该如何找出其中相同的记录? 2.思路 处理该问题的困难主要是无法将这海量数据一次性读进内存中. 一次性读不进内存中,那么是否可以考虑多次呢?如果可以,那么多次读入要怎么计算相同的值呢? 我们可以用分治思想, 大而化小.相同字符串的值hash过后是相等的, 那么我们可以考虑使用hash取模,

  • 详解利用上下文管理器扩展Python计时器

    目录 一个 Python 定时器上下文管理器 了解 Python 中的上下文管理器 理解并使用 contextlib 创建 Python 计时器上下文管理器 使用 Python 定时器上下文管理器 写在最后 上文中,我们一起学习了手把手教你实现一个 Python 计时器.本文中,云朵君将和大家一起了解什么是上下文管理器 和 Python 的 with 语句,以及如何完成自定义.然后扩展 Timer 以便它也可以用作上下文管理器.最后,使用 Timer 作为上下文管理器如何简化我们自己的代码. 上

  • 详解利用装饰器扩展Python计时器

    目录 介绍 理解 Python 中的装饰器 创建 Python 定时器装饰器 使用 Python 定时器装饰器 Python 计时器代码 其他 Python 定时器函数 使用替代 Python 计时器函数 估计运行时间timeit 使用 Profiler 查找代码中的Bottlenecks 总结 介绍 在本文中,云朵君将和大家一起了解装饰器的工作原理,如何将我们之前定义的定时器类 Timer 扩展为装饰器,以及如何简化计时功能.最后对 Python 定时器系列文章做个小结. 这是我们手把手教你实

  • 详解利用Pytorch实现ResNet网络

    目录 正文 评估模型 训练 ResNet50 模型 正文 每个 batch 前清空梯度,否则会将不同 batch 的梯度累加在一块,导致模型参数错误. 然后我们将输入和目标张量都移动到所需的设备上,并将模型的梯度设置为零.我们调用model(inputs)来计算模型的输出,并使用损失函数(在此处为交叉熵)来计算输出和目标之间的误差.然后我们通过调用loss.backward()来计算梯度,最后调用optimizer.step()来更新模型的参数. 在训练过程中,我们还计算了准确率和平均损失.我们

随机推荐