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

疑问: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)时,实际执行逻辑:

    1. 合并两个索引的所有元素
    2. 对合并结果进行排序(默认开启,可通过sort=False参数关闭)
    3. 不会自动去重——只有当参与合并的两个索引都是无重复的唯一值索引时,union()才会返回无重复的结果
  • 若要得到去重后的合并索引,可采用两种方案:

    1. 先执行union()再调用unique()去重:
      idx1.union(idx2).unique()
      
    2. 直接合并后去重再转为Index类型:
      pd.Index(pd.unique(idx1.append(idx2)))
      

补充:如果索引本身是唯一值索引(即idx.is_unique返回True),union()会自动去重,这也是你最初产生预期的原因。但你的idx2包含重复值,所以触发了保留重复项的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:12:39