You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas Series右连接定义是什么?两段相关代码是否等价?

1. Pandas Series 右连接的定义

简单来说,Pandas Series的右连接(right join,也叫右外连接)在对齐两个Series时,完全以右侧Series的索引为基准:

  • 最终结果的索引会和右侧Series的索引完全一致(包括顺序和所有元素);
  • 对于右侧索引中存在、但左侧Series没有的索引项,左侧Series会在对应位置填充NaN;
  • 对于两侧都有的索引项,保留左侧Series的原有值;
  • 左侧Series中存在但右侧没有的索引项,会被直接丢弃(这是右连接的核心特点)。

举个例子:如果s1的索引是['a','b'],值是[1,2];s2的索引是['b','c'],值是[3,4]。对s1和s2做右连接对齐后,s1会变成索引['b','c'],值[2, NaN]。

2. 两段代码是否等价?

这两段代码并不等价,核心差异有两点:

差异1:左侧原有多余索引的处理

代码段1使用align(join='right')时,会直接丢弃s1中所有不在s2索引里的项。比如如果s1有索引'a'但s2没有,执行后s1的'a'会被删掉。
而代码段2只是给s1添加s2中存在但s1没有的索引项(赋值NaN),但完全保留s1原来所有的索引项——包括那些s2没有的。

差异2:索引顺序的一致性

align方法默认会将结果的索引排序并和右侧Series的索引顺序完全匹配(除非显式设置sort=False)。比如s2的索引是['c','b'],代码段1执行后s1的索引会变成['c','b'];
但代码段2只是在s1的现有索引末尾添加新的项,不会改变原有索引的顺序,也不会对齐到s2的索引顺序。

举个具体的例子:
假设s1 = pd.Series([1,2], index=['a','b']),s2 = pd.Series([3,4], index=['c','b'])

  • 代码段1执行后,s1会变成:
    c    NaN
    b    2.0
    dtype: float64
    
  • 代码段2执行后,s1会变成:
    a    1.0
    b    2.0
    c    NaN
    dtype: float64
    

显然两者的结果完全不同。

内容的提问来源于stack exchange,提问作者Mark Harrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:45:48