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

如何垂直合并多个pandas MultiIndex并实现去重排序?

合并多个MultiIndex并实现去重与排序

解决方案代码

import pandas as pd

# 示例中的MultiIndex列表
multi_indices = [
    pd.MultiIndex.from_tuples([(48, 39), (48, 40), (48, 41), (48, 42), (48, 43), 
                               (49, 39), (49, 40), (49, 41), (49, 42), (49, 43)]),
    pd.MultiIndex.from_tuples([(48, 48), (48, 49), (49, 48), (49, 49)])
]

# 1. 合并所有索引元组
all_tuples = []
for idx in multi_indices:
    all_tuples.extend(idx.tolist())

# 2. 去重:保留唯一索引对,(a,b)与(b,a)视为不同
unique_tuples = list(dict.fromkeys(all_tuples))

# 3. 对索引元组排序
sorted_tuples = sorted(unique_tuples)

# 4. 创建合并后的MultiIndex
merged_multi_idx = pd.MultiIndex.from_tuples(sorted_tuples)

# 查看结果
print(merged_multi_idx)

步骤说明

  • 合并元组:遍历每个MultiIndex,用tolist()将其转换为元组列表,再合并到一个总列表中,把分散的索引全部收集起来。
  • 去重处理:利用字典键的唯一性,dict.fromkeys(all_tuples)会自动过滤重复的元组,同时保留元素首次出现的顺序;如果不需要保留原顺序,也可以用list(set(all_tuples)),不过后续还要排序,两种方式都能满足需求。这里因为要求(a,b)和(b,a)是不同的索引对,所以直接按元组本身去重即可,无需额外逻辑。
  • 排序操作:Python内置的sorted()函数默认会按元组的第一个元素升序排列,当第一个元素相同时,再按第二个元素升序排列,正好符合常规的排序需求。
  • 生成新MultiIndex:用pd.MultiIndex.from_tuples()把排序后的元组列表转换成最终的MultiIndex对象。

运行上述代码后,得到的结果就是你需要的合并、去重且排序后的MultiIndex。

内容的提问来源于stack exchange,提问作者An old man in the sea.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:35:24