Pandas `isin` 函数的更快替代方案

2024-01-03

我有一个非常大的数据框df看起来像:

ID       Value1    Value2
1345      3.2      332
1355      2.2      32
2346      1.0      11
3456      8.9      322

我有一个包含 ID 子集的列表ID_list。我需要有一个子集df为了ID包含在ID_list.

目前,我正在使用df_sub=df[df.ID.isin(ID_list)]去做吧。但这需要很多时间。ID包含在ID_list没有任何模式,所以不在一定范围内。 (我需要对许多相似的数据帧应用相同的操作。我想知道是否有更快的方法来做到这一点。如果 make 会有很大帮助吗?ID作为索引?

Thanks!


编辑 2:这是对各种性能的最新研究的链接pandas操作,尽管迄今为止它似乎不包括合并和连接。

https://github.com/mm-mansour/Fast-Pandas https://github.com/mm-mansour/Fast-Pandas

编辑 1:这些基准测试是针对相当旧版本的 pandas 的,可能仍然不相关。请参阅下面迈克的评论merge.

这取决于数据的大小,但对于大型数据集数据帧.join http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html?highlight=join#pandas.DataFrame.join似乎是要走的路。这要求您的 DataFrame 索引是您的“ID”,并且您要加入的系列或 DataFrame 的索引是您的“ID_list”。该系列还必须有一个name与使用join,它被拉入一个名为的新字段name。您还需要指定内部联接以获得类似的内容isin因为join默认为左连接。询问in语法似乎具有相同的速度特征isin对于大型数据集。

如果您正在处理小型数据集,您会得到不同的行为,并且使用列表理解或应用于字典实际上比使用更快isin.

否则,您可以尝试使用以下命令获得更快的速度Cython http://pandas.pydata.org/pandas-docs/stable/enhancingperf.html.

# I'm ignoring that the index is defaulting to a sequential number. You
# would need to explicitly assign your IDs to the index here, e.g.:
# >>> l_series.index = ID_list
mil = range(1000000)
l = mil
l_series = pd.Series(l)

df = pd.DataFrame(l_series, columns=['ID'])


In [247]: %timeit df[df.index.isin(l)]
1 loops, best of 3: 1.12 s per loop

In [248]: %timeit df[df.index.isin(l_series)]
1 loops, best of 3: 549 ms per loop

# index vs column doesn't make a difference here
In [304]: %timeit df[df.ID.isin(l_series)]
1 loops, best of 3: 541 ms per loop

In [305]: %timeit df[df.index.isin(l_series)]
1 loops, best of 3: 529 ms per loop

# query 'in' syntax has the same performance as 'isin'
In [249]: %timeit df.query('index in @l')
1 loops, best of 3: 1.14 s per loop

In [250]: %timeit df.query('index in @l_series')
1 loops, best of 3: 564 ms per loop

# ID must be the index for DataFrame.join and l_series must have a name.
# join defaults to a left join so we need to specify inner for existence.
In [251]: %timeit df.join(l_series, how='inner')
10 loops, best of 3: 93.3 ms per loop

# Smaller datasets.
df = pd.DataFrame([1,2,3,4], columns=['ID'])
l = range(10000)
l_dict = dict(zip(l, l))
l_series = pd.Series(l)
l_series.name = 'ID_list'


In [363]: %timeit df.join(l_series, how='inner')
1000 loops, best of 3: 733 µs per loop

In [291]: %timeit df[df.ID.isin(l_dict)]
1000 loops, best of 3: 742 µs per loop

In [292]: %timeit df[df.ID.isin(l)]
1000 loops, best of 3: 771 µs per loop

In [294]: %timeit df[df.ID.isin(l_series)]
100 loops, best of 3: 2 ms per loop

# It's actually faster to use apply or a list comprehension for these small cases.
In [296]: %timeit df[[x in l_dict for x in df.ID]]
1000 loops, best of 3: 203 µs per loop

In [299]: %timeit df[df.ID.apply(lambda x: x in l_dict)]
1000 loops, best of 3: 297 µs per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas `isin` 函数的更快替代方案 的相关文章

  • virtualenvwrapper 函数在 shell 脚本中不可用

    所以 我再一次制作了一个很棒的 python 程序 它让我的生活变得更加轻松 并节省了大量时间 当然 这涉及到一个 virtualenv 用mkvirtualenvvirtualenvwrapper 的功能 该项目有一个requiremen
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • 删除 tkinter 文本默认绑定

    我正在制作一个简单的 tkinter 文本编辑器 但我想要所有默认绑定文本小部件如果可能的话删除 例如当我按Ctrl i它默认插入一个制表符 我制作了一个事件绑定来打印文本框中有多少行 我将事件绑定设置为Ctrl i以及 当我运行它时 它会
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • 为什么我会收到 ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

    以下代码给出了值错误 major males for row in recent grads if recent grads Men gt recent grads Women major males append recent grads
  • pandas 数据框的最大大小

    我正在尝试使用读取一个有点大的数据集pandas read csv or read stata功能 但我不断遇到Memory Errors 数据帧的最大大小是多少 我的理解是 只要数据适合内存 数据帧就应该没问题 这对我来说不应该是问题 还
  • 对法语文本进行词形还原[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些法语文本需要以某种方式进行处理 为此 我需要 首先 将文本标记为单词 然后对这些单词进行词形还原以避免多次处理相同的词根 据我
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • Python 中“is”运算符的语义是什么?

    如何is运算符确定两个对象是否相同 它是如何工作的 我找不到它的记录 来自文档 http docs python org reference datamodel html 每个对象都有一个身份 一个类型 和一个值 对象的身份 一旦发生就永远
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • 为什么我无法杀死 k8s pod 中的 python 进程?

    我试图杀死一个 python 进程 ps aux grep python root 1 12 6 2 1 2234740 1332316 Ssl 20 04 19 36 usr bin python3 batch run py root 4
  • 如何将 pandas DataFrame 转换为 TimeSeries?

    我正在寻找一种将 DataFrame 转换为 TimeSeries 而不拆分索引和值列的方法 有任何想法吗 谢谢 In 20 import pandas as pd In 21 import numpy as np In 22 dates
  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • 如何在类型提示中定义元组或列表的大小

    有没有办法在参数的类型提示中定义元组或列表的大小 目前我正在使用这样的东西 from typing import List Optional Tuple def function name self list1 List Class1 if
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • Django 中使用外键的抽象基类继承

    我正在尝试在 Django 支持的网站上进行模型继承 以遵守 DRY 我的目标是使用一个名为 BasicCompany 的抽象基类来为三个子类提供通用信息 Butcher Baker CandlestickMaker 它们位于各自的应用程序
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 在自定义 keras 层的调用函数中传递附加参数

    我创建了一个自定义 keras 层 目的是在推理过程中手动更改前一层的激活 以下是基本层 它只是将激活值乘以一个数字 import numpy as np from keras import backend as K from keras
  • JSONDecodeError:额外数据:Python [重复]

    这个问题在这里已经有答案了 我使用以下代码从文件加载 json file file name obj list with open file as f for json obj in f obj list append loads json

随机推荐

  • DefaultTraceListener 的性能影响

    使用时System Diagnostics跟踪 如果不删除 默认 跟踪侦听器 是否会对性能产生重大 可测量 影响 生产ASP NET应用在release模式 与TRACE在编译时定义的常量 但在运行时没有附加调试器 为了澄清 问题是关于 默
  • iPhone SDK:如何在视图中播放视频?而不是全屏

    我正在尝试在UIView 所以我的第一步是为该视图添加一个类 并使用以下代码开始在其中播放电影 IBAction movie id sender NSBundle bundle NSBundle mainBundle NSString mo
  • 如何使用 jQuery 读取外部 html 文件并将其存储到字符串变量?显示错误

    我正在尝试动态生成 W eb 应用程序的代码我想读书外部 HTML 文件并将其存储到 Javascript 或 Jquery 中的字符串变量 有什么有效的方法吗 HTML 文件 对象文本 html div class text object
  • {“errorMessages”:[“意外字符('''(代码39)):预期有效值

    我发现 使用 POST 查询 here https developer atlassian com jiradev jira apis jira rest apis jira rest api tutorials jira rest api
  • 仅将日期的年份部分用于 WHERE 条件

    在下面的 LINQ 语句中 我想选择考试日期为 2010 年的人员 考试日期存储为日期时间 因为其他应用程序中使用实际日期和时间 将考试日期与 2010 进行比较的最优雅 最简单 最好的方法是什么 或者 我应该使用 gt 将考试日期与 20
  • 是否可以使用 MSDeploy 修改现有站点的 web.config?

    是否可以使用 MSDeploy 修改 或替换 现有站点的 web config 可以替换 Web 配置文件的某些部分 使用 xPath 查询或正则表达式指定 为此 请使用 declareParam 和 setParam 命令行开关 Like
  • Pandas 强制 NaN 位于每个索引的每列底部

    我有一个 DataFrame 其中多个行跨越每个索引 以第一个索引为例 其结构如下 df pd DataFrame A first 1 0 1 0 np NaN np NaN np NaN 2 0 np NaN 2 0 np NaN np
  • 关闭从 mysql.connector python 到 mysql 的池连接

    我正在使用 mysql connector 包并使用进行连接池MySQLConnectionPool班级 我有一个长时间运行的进程 运行此进程时 所有池连接在不规则的时间段模式中保持空闲状态 源代码中有 remove connections
  • 我可以对我自己的非指针类型使用“空指针优化”吗?

    当你有一个Option lt T gt 编译器知道NULL永远不是一个可能的值 T and 编码None变体为NULL instead https stackoverflow com q 16504643 155423 这可以节省空间 us
  • 如何按列累积numpy数组中的值?

    我如何使用numpy累加器 http docs scipy org doc numpy dev reference generated numpy ufunc accumulate html numpy ufunc accumulate a
  • 身份和自定义表之间的多对多关系。 EF7 - 代码优先

    如何在 Identity 3 0 中的 AspNetRoles 和我的自定义表之间建立多对多关系 我想要简单的 3 个表 其中包含 PermissionId 和 RoleId 例如 AspNetUsersRole 我有这样的事情 publi
  • 如何从rails控制台获取详细的错误消息?

    假设我希望从控制台创建一个用户 其中包含电子邮件already存在 如果我做User create 由于模型验证 在这种情况下的独特性 create失败 rails 控制台中的输出将显示 rollback transaction 用户未保存
  • :has 与 :matches - 选择器级别 4

    只是想知道CSS 选择器4 伪选择器之间有什么区别 has and matches 规格http dev w3 org csswg selectors 4 overview http dev w3 org csswg selectors 4
  • 如何从 Jenkins 将节点应用程序部署到远程主机?

    这是节点应用程序目录根目录中的 Jenkins 文件 pipeline agent any triggers pollSCM stages stage deploy steps sh scp 我将 Jenkins 配置为连接到远程 gitl
  • 显示图像时出现奇怪的 matplotlib 行为

    当范围 0 255 内的常规 RGB 图像转换为 float 然后由 matplotlib 显示时 图像将显示为负数 如果它被转换为 uint8 它会正确显示 当然 这给我弄清楚发生了什么造成了一些麻烦 因为我不小心将其中一张图像投射为浮动
  • gpiod - 在设备树中使用标签

    我想用libgpiod通过自定义板上的用户空间控制一些 GPIO 我有一个 i MX6UL 处理器 它有数百个引脚 我将只使用其中 8 个 作为 GPIO 我读到了关于libgpiod因为它正在取代旧的 sysfs API 我很高兴您可以为
  • Summernote createRange 与 HTML

    我的 Summernote 编辑器中的某些文本包含 HTML 我想要让用户选择的文本与编辑器中的文本完全相同 到目前为止我看到的所有答案都告诉我使用这个 summernote summernote createRange toString
  • .NET MVC 4 WebAPI POST 不起作用

    核心问题 GET 有效 POST 无效 我是 WebAPI 的新手 所以我可能做了一些愚蠢的事情 但我在网上查了很多资料 试图找出为什么这不起作用 相当简单的 WebAPI C 应用程序 我试图将其简化为非常简单的路线 config Rou
  • X11 窗口调整大小时卡顿

    我正在 X11 中创建一个 openGL 窗口并使用glxswapbuffers用于双缓冲 问题是 渲染看起来不错 但在调整大小时 openGL 内容会跳来跳去 窗口边框会出现卡顿现象 我尝试过滤ConfigureNotify事件 延迟它们
  • Pandas `isin` 函数的更快替代方案

    我有一个非常大的数据框df看起来像 ID Value1 Value2 1345 3 2 332 1355 2 2 32 2346 1 0 11 3456 8 9 322 我有一个包含 ID 子集的列表ID list 我需要有一个子集df为了