为什么在 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 倍的加速! (使用 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/