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

时间:2018-06-21 14:21:21

标签: 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,但没有明确提及使用索引的任何好处。

1 个答案:

答案 0 :(得分:4)

这样做的原因是DataFrame的索引is backed by a hash table

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

一种可能更快合并列的策略是首先为两者中的最小者创建一个哈希表。尽管如此,这意味着合并将比创建此字典所需的时间慢。