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

wil*_*llk 12 python merge dataframe pandas

为什么在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]})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

df = df.set_index('ID')
df2 = df2.set_index('ID')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

通过Pandas内部页面阅读它会说索引"在Cython中填充标签的位置以进行O(1)查找." 这是否意味着使用索引进行操作比使用列更有效?始终将索引用于合并等操作是最佳做法吗?

我阅读了加入和合并文档,并没有明确提到使用索引的任何好处.

ntg*_*ntg 7

这样做的原因是 DataFrame 的索引由哈希表支持

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

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