在 Pandas 中合并索引上的数据帧效率更高

2024-01-07

为什么在索引上合并 Pandas 中的数据帧比在列上合并数据帧更有效(更快)?

import pandas as pd

# Dataframes share the ID column
df = pd.DataFrame({'ID': [0, 1, 2, 3, 4],
                   'Job': ['teacher', 'scientist', 'manager', 'teacher', 'nurse']})

df2 = pd.DataFrame({'ID': [2, 3, 4, 5, 6, 7, 8],
                    'Level': [12, 15, 14, 20, 21, 11, 15], 
                    'Age': [33, 41, 42, 50, 45, 28, 32]})
df = df.set_index('ID')
df2 = df2.set_index('ID')

这相当于大约 3.5 倍的速度提升! (使用熊猫0.23.0)

阅读通过Pandas 内部页面 https://pandas.pydata.org/pandas-docs/stable/internals.html它说索引“将标签字典填充到 Cython 中的位置以进行 O(1) 查找”。这是否意味着使用索引进行操作比使用列进行操作更有效?始终使用索引进行合并等操作是否是最佳实践?

我通读了加入和合并的文档 https://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging并且它没有明确提及使用索引的任何好处。


原因是 DataFrame 的索引由哈希表支持 https://stackoverflow.com/questions/27238066/what-is-the-point-of-indexing-in-pandas.

要合并两个集合,我们需要为第一个集合中的每个元素找到第二个集合中对应的元素(如果存在)。如果有哈希表支持,搜索速度会明显加快,因为在未排序列表中搜索是 O(N),而在由哈希函数~O(1)支持的列表。

一种可以更快地合并列的策略是首先为两者中最小的一个创建一个哈希表。但这仍然意味着在创建这个字典时合并会变慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Pandas 中合并索引上的数据帧效率更高 的相关文章

  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • 雅虎财务请求功能出现 404 客户端错误

    yahoo Financials的请求功能出现404 Client Error 直接点击以下网址没有问题 https finance yahoo com quote AAPL financials p AAPL https finance
  • Flask 失败并显示“错误:导入‘X’时,引发了 ImportError”,但不显示错误。如何找到错误的根源?

    当使用以下命令启动 Flask 应用程序时 flask run 我收到错误 Error While importing wsgi an ImportError was raised Usage flask OPTIONS COMMAND A
  • 类型错误:“datetime.datetime”和“str”的实例之间不支持“>”

    我是 python 日期和时间类型的新手 我有一个日期值 date 2018 11 10 10 55 31 00 00 我需要检查该日期值是否超过 90 天 我试过 from datetime import datetime from da
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 无法使用 python rasterio、gdal 打开 jp2 (来自哨兵)

    我试图在 python 中将 jp2 栅格产品作为栅格打开 但当我们使用 raterio 和 gdal 包时没有成功 我收到此错误 RasterioIOError b4 jp2 not recognized as a supported f
  • python Recipe:列出最接近等于值的项[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 考虑像这样的列表 0 3 7 10 12 15 19 21 我想获得最接近任何值的最近的最小数字 所以如果我通过4 我会得到3 如果我
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • 没有名为“turtle”的模块

    我正在学习并尝试用Python3制作贪吃蛇游戏 我正在进口海龟 我正在使用 Linux mint 19 PyCharm python37 python3 tk Traceback most recent call last File hom
  • 两种 ODE 求解器之间的差异

    我想知道 两者之间有什么区别ODEINT and solve ivp用于求解微分方程 它们之间有什么优点和缺点 f1 solve ivp f 0 1 y0 y0 is the initial point f2 odeint f y0 0 1
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数

随机推荐

  • Firebase Android 自动登录

    所以我设置了电子邮件 密码注册和登录 那是有效的 我以为 Firebase 已经解决了这个问题 但显然没有 我希望在用户关闭应用程序后 下次打开应用程序时就已经登录 缺什么 class LoginActivity AppCompatActi
  • 使用 nth-child 设置第 4 项及以后项目的样式

    我有一个列表项 我希望第四项及以后的项有不同的background color 我尝试过以下方法 li nth child 4 background color blue 这仅对第 4 个项目进行样式设置 然后我尝试了以下操作 希望它能够为
  • Java 8 多线程:如何实现并行性以及单个线程的超时?

    我想要实现的目标摘要 我想并行执行 N 个任务 这样任何单个任务的运行时间都不应超过两秒 我们可以将此类任务标记为失败 作为输出 我想返回成功任务的输出和失败任务的状态为失败 此外 一项任务的超时不应导致电路中断 即其他任务的执行不应停止
  • 如何在 UML 中表示从模板参数的继承?

    使用 UML 我如何表示A lt Foo gt 在下面的代码中 template lt class T gt class A public T class Foo A lt Foo gt a foo 像这样的东西 对可怜的ascii艺术表示
  • ForkJoinPool - 为什么程序抛出 OutOfMemoryError?

    我想在 Java 8 中尝试 ForkJoinPool 所以我编写了一个小程序来搜索给定目录中名称包含特定关键字的所有文件 Program public class DirectoryService public static void m
  • C# 将字节数组附加到现有文件

    我想将字节数组附加到已经存在的文件中 C test exe 假设以下字节数组 byte appendMe new byte 1000 File AppendAllBytes C test exe appendMe Something lik
  • 嵌套 jQuery 选择器

    无论如何 是否有嵌套的 jQuery 选择器 例如 如果该页面还有一个ID LeadEditForm Title 某处然后执行以下操作 jQuery id A0 R0 Main Phone Number live mousedown fun
  • 在 Android 中使用 EditText 小部件屏蔽输入

    有没有办法可以为 Android 中的 EditText 控件指定输入掩码 我希望能够为社会安全号码指定类似 的内容 这将导致任何无效输入被自动拒绝 例如 我输入字母字符而不是数字 我意识到我可以添加 OnKeyListener 并手动检查
  • 如何检测用户是否不允许位置更新

    如果用户在首次启动时拒绝允许位置更新 我怎么能检测到这个 检查CLLocationManager 的authorizationStatus 方法
  • Environment.getExternalStorageDirectory().listFiles() 返回 null

    我的应用程序中需要一个文件选择器 在尝试了不起作用的第三方库 无内容 后 我尝试自己实现它 并且得到了相同的结果 最奇怪的是 Environment getExternalStorageDirectory listFiles 返回空值 这是
  • 如何让 Pycharm 从测试文件夹递归运行所有 python 单元测试

    我来自 Java 背景 因此我将单元测试组织成单独的并行测试层次结构 以反映我的主项目的结构 我使用 PyCharm 代替 Intellij 或 Eclipse 在这两个 I IDE 中 我可以选择任何正在测试的包 并在此命名空间下递归运行
  • 如何获取 HTML5 画布文本来显示 html 实体?

    我正在解析一个 xml 文件 该文件存储我需要在画布上显示的图像 标题数据 然而 偶尔文件中会有一个实体 当将文本绘制到画布上时 它会将其解释为平面文本 我怎样才能得到 copy 在画布上显示为 这是否可能 或者有人知道一个好的解决方法吗
  • Nhibernate Linq 查询到 QueryOver

    我有以下代码 1 ids GetAnArrayOfIds 2 jobEntities jobEntities Where j gt j Locations Select l gt l Id Any ids Contains 如何使用 Que
  • std::allocate_shared 使用什么类型来分配内存?

    From https en cppreference com w cpp memory shared ptr allocate shared https en cppreference com w cpp memory shared ptr
  • 从 Http Servlet 请求标头读取浏览器/客户端时间

    当向 servlet 发出请求时是否可以读取浏览器 客户端计算机 时间 我不相信是这样 不幸的是HTTPDate http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 18标头
  • R 中的成对交互矩阵

    我正在尝试计算 R 中的成对矩阵 该矩阵计算个体与其他个体交互的次数 因此该矩阵将包含与个体数量相对应的 N 行和列 我有一个数据框 在单独的列中列出 演员 和 合作伙伴 nn lt data frame actors c DOL DOL
  • 为什么建议 React 的 PureComponent 所有子组件都“纯”

    看完官方的介绍反应文档 https reactjs org docs 我遇到过this https reactjs org docs react api html reactpurecomponent关于纯组件 此外 React PureC
  • Visual Studio 生产力电动工具配置设置

    我试图找出 Visual Studio Productivity Power Tools 设置的存储位置 我最近转移到 Visual Studio 的新实例 并且丢失了所有 Power Tools 正则表达式选项卡着色设置 它们显然不是正常
  • R 的plot() 中的默认字体是什么?

    我无法找出默认字体是什么plot R 中的选项是 我记得在某个地方黑体但我找不到任何消息来源来证实这个想法 有谁知道默认字体是什么plot 选项是以及如何更改字体 我知道有family选项 但字体的选择非常有限 我也知道有一个family下
  • 在 Pandas 中合并索引上的数据帧效率更高

    为什么在索引上合并 Pandas 中的数据帧比在列上合并数据帧更有效 更快 import pandas as pd Dataframes share the ID column df pd DataFrame ID 0 1 2 3 4 Jo