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
相关产品推荐
相关产品推荐

