如何垂直合并多个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.
相关产品推荐
相关产品推荐

