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

Python 在索引上合并数据帧在索引中更有效,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,为什么在索引上合并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_索引('ID')) df2=d

为什么在索引上合并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_索引('ID'))
df2=df2.set_索引('ID'))

这表示速度提高了大约3.5倍!(使用熊猫0.23.0)

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


我通读了全文,没有明确提到使用索引的任何好处

原因是数据帧的索引

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


合并列可能更快的一种策略是首先为两个列中最小的列创建一个哈希表。但这仍然意味着,在创建此目录所需的时间内,合并的速度将变慢。

相关:@jpp重点强调了唯一性这一问题。重新创建具有非唯一索引的示例,您将看到性能消失。而且,您忽略了创建索引的时间和精力。还有最后一件事,在
0.23
中,您可以在
merge
so
df.merge(df2,on='ID')中引用
索引
级别的名称
'ID'
是否在索引中时起作用。@piRSquared jpp链接的问题没有解决使用列合并和使用索引合并之间的时间差。具体来说,为什么这两个调用之间存在显著的时间差异?dup目标解决了使用唯一和/或排序的索引进行查找时发生的情况。这就是将列放入索引时发生的情况。我们可以根据您的具体情况回答您的问题。但这是否增加了超过dup目标的价值?我决定它没有。如果你还想知道答案是什么,那么也许我错了,而且不像我想的那么明显。给我一分钟。好的,重新打开。有人可以把这些元素联系在一起。我仍然认为大部分相关信息都包含在这个答案中。