Python 熊猫加入vs添加列

Python 熊猫加入vs添加列,python,pandas,join,Python,Pandas,Join,我有两个数据帧(df1和df2),具有相同的多索引df1有A列,df2有B列 我找到了两种“连接”这些数据帧的方法: df_joined = df1.join(df2, how='inner') 或 第一种选择需要更长的时间。为什么? 选项2是否不查看索引,而只是将列“附加”到右侧 之后运行此操作将返回True,因此最终结果看起来是相同的,但这可能是因为df1和df2中的索引顺序也相同: df_joined.equals(df1) 知道索引是相同的,有没有更快的方法加入数据帧?如果索引对齐,

我有两个数据帧(
df1
df2
),具有相同的
多索引
df1
有A列,
df2
有B列

我找到了两种“连接”这些数据帧的方法:

df_joined = df1.join(df2, how='inner')

第一种选择需要更长的时间。为什么? 选项2是否不查看索引,而只是将列“附加”到右侧

之后运行此操作将返回
True
,因此最终结果看起来是相同的,但这可能是因为
df1
df2
中的索引顺序也相同:

df_joined.equals(df1)

知道索引是相同的,有没有更快的方法加入数据帧?

如果索引对齐,没有比
df1['B']=df2['B']
更快的方法了

将一个系列分配给另一个系列已经在
pandas
中得到了很好的优化

join
比assignment花费的时间更长,因为它显式地排列了
df1.index
df2.index
,这非常昂贵。我们并不认为指数的顺序是一致的。根据,如果未指定任何列,则将在数据帧的各自索引上进行
连接


如果您发现这是您工作流程中的瓶颈,我会感到惊讶。如果是,那么我建议您直接使用
numpy
数组,避免使用
pandas

OP不会抱怨
df1['B']=df2['B']
的执行速度,但是相反,我很好奇为什么
join
方法比赋值花费的时间要长得多?@Szabolcs补充了一个简短的解释。@jp_data_analysis那么如果df2中的索引顺序不同,即未对齐,会发生什么?在
df1['B']=df2['B']
中,仍将添加列,但列本身是错误的,即错误索引处的值?@Dimebag,
pandas
将相应地排列序列,例如
df2
中的索引0将分配给
df1
中的索引0,即使在打印数据帧时它们处于不同的顺序位置。我不知道在你的情况下,索引或顺序位置是否重要。简短的回答,使用的逻辑是完全不同的
df1.join(df2)
做得更多,而且总是更慢,即使输出相同。您可以查看
pandas
源代码以了解更多详细信息。
df_joined.equals(df1)