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

标签 python pandas dataframe merge

为什么在 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]})

enter image description here

df = df.set_index('ID')
df2 = df2.set_index('ID')

enter image description here

这代表了大约 3.5 倍的加速! (使用 Pandas 0.23.0)

通读 Pandas internals page它说一个索引“将标签的字典填充到 Cython 中的位置以进行 O(1) 查找。”这是否意味着使用索引进行操作比使用列更有效?始终使用索引进行合并等操作是最佳做法吗?

我通读了 documentation for joining and merging并且它没有明确提及使用索引的任何好处。

最佳答案

这是因为 DataFrame 的索引 is backed by a hash table .

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

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

关于python - 在 Pandas 中合并索引上的数据帧效率更高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50970859/

相关文章:

python - 如何根据值拆分 pandas 中的一列并创建新列?

dataframe - 创建数据框时输出不当

python - 计算数据帧中属于给定日期时间间隔的唯一值

python - Pandas read_excel 返回对象类型的列

php - 在 Python 中实现 preg_match_all

python - 动态长度Django模型字段

python - 转换为 html 表时删除 pandas 数据框中的索引

python - 如何在 Python selenium 中使用 JavascriptExecutor 而不是 send_keys

python - Matplotlib:3D trisurf 图中的 ax.format_coord() - 返回 (x,y,z) 而不是(方位角,仰角)?

python - 通过混合列表和数据帧列,数组长度与索引长度不匹配