疑问:pandas.Index.union()为何未返回预期的索引并集?
Pandas Index.union() 行为疑问
问题背景
我编写了如下Python代码:
import pandas as pd idx1 = pd.Index(list('abc')) idx2 = pd.Index(list('aabbccdd')) idx1.union(idx2)
根据我的理解,上述代码应返回:
Index(['a', 'b', 'c', 'd'], dtype='object')
但实际返回结果为:
Index(['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'], dtype='object')
我已在网上搜索许久,但未找到可靠解答。请问我是否存在理解误区?该方法的实际工作逻辑是怎样的?
原因解析
你确实存在理解误区,Pandas的Index.union()方法默认保留重复值,这个行为取决于参与合并的索引是否包含重复项:
当调用
idx1.union(idx2)时,实际执行逻辑:- 合并两个索引的所有元素
- 对合并结果进行排序(默认开启,可通过
sort=False参数关闭) - 不会自动去重——只有当参与合并的两个索引都是无重复的唯一值索引时,
union()才会返回无重复的结果
若要得到去重后的合并索引,可采用两种方案:
- 先执行
union()再调用unique()去重:idx1.union(idx2).unique() - 直接合并后去重再转为Index类型:
pd.Index(pd.unique(idx1.append(idx2)))
- 先执行
补充:如果索引本身是唯一值索引(即idx.is_unique返回True),union()会自动去重,这也是你最初产生预期的原因。但你的idx2包含重复值,所以触发了保留重复项的逻辑。
内容的提问来源于stack exchange,提问作者ddduckbil9871
相关产品推荐
相关产品推荐

