为什么在索引上合并Pandas中的数据帧比在列上合并更高效(更快)
将熊猫作为pd导入
#数据帧共享ID列
df=pd.DataFrame({'ID':[0,1,2,3,4],
‘工作’:[‘老师’、‘科学家’、‘经理’、‘老师’、‘护士’]})
df2=pd.DataFrame({'ID':[2,3,4,5,6,7,8],
“级别”:[12,15,14,20,21,11,15],
‘年龄’:[33,41,42,50,45,28,32]})
df=df.set\u index('ID'))
df2=df2.set_索引('ID'))
这表示速度提高了大约3.5倍!(使用熊猫0.23.0)
阅读Pandas internals页面时,它说索引“将标签的dict填充到Cython中的位置,以便进行O(1)查找。”这是否意味着使用索引执行操作比使用列更高效?始终使用索引进行合并等操作是否是最佳做法
我通读了关于加入和合并的文档,其中没有明确提到使用索引的任何好处
原因是数据帧的索引由哈希表支持
要合并两个集合,我们需要为第一个集合的每个元素找到第二个集合中对应的元素(如果存在),如果由哈希表支持,则搜索速度要快得多,因为在未排序的列表中搜索是O(N),而在由哈希函数~O(1)支持的列表中搜索
合并列可能更快的一种策略是首先为两个列中最小的列创建一个哈希表。但这仍然意味着,在创建此dict时,合并速度会变慢