如何用Pandas按Series值降序重排MultiIndex的二级索引
用Pandas重排MultiIndex Series的实现方案
当然可以只用Pandas完成这个需求!咱们直接上实操步骤,一步步把你的MultiIndex Series转换成想要的格式:
第一步:还原原始数据
首先得把你给出的文本数据转换成Pandas的MultiIndex Series,方便后续操作:
import pandas as pd # 构造原始数据值 data_values = [0.463120, 0.269023, 0.244348, 0.232505, 0.199640, 0.381681, 0.284957, 0.259003, 0.241432, 0.197692, 0.859803, 0.823075, 0.774576, 0.613309, 0.607444, 0.815492, 0.666928, 0.628147, 0.554344, 0.506123] # 构造原始的MultiIndex multi_index = pd.MultiIndex.from_tuples([ ('A', 385), ('A', 278), ('A', 190), ('A', 818), ('A', 64), ('B', 1889), ('B', 1568), ('B', 1543), ('B', 1950), ('B', 1396), ('C', 2485), ('C', 2980), ('C', 2588), ('C', 2748), ('C', 2055), ('E', 3081), ('E', 3523), ('E', 3638), ('E', 3623), ('E', 3400) ], names=['一级索引', '原二级索引']) # 创建原始Series original_series = pd.Series(data_values, index=multi_index)
第二步:按需求重排索引和值
核心操作分两步:组内按值降序排序 + 替换二级索引为递增序号:
# 1. 按一级索引分组,组内对值进行降序排序 sorted_series = original_series.groupby(level='一级索引', group_keys=False).sort_values(ascending=False) # 2. 为每个组生成从1开始的递增二级索引(cumcount从0开始,所以加1) new_secondary_index = sorted_series.groupby(level='一级索引').cumcount() + 1 # 3. 替换原来的二级索引 final_series = sorted_series.set_levels(new_secondary_index, level='原二级索引') # (可选)如果需要把一级索引的'E'改成'D',执行下面这行 final_series.index = final_series.index.set_levels(['A', 'B', 'C', 'D'], level='一级索引')
最终效果验证
打印final_series就能得到你想要的格式:
一级索引 原二级索引 A 1 0.463120 2 0.269023 3 0.244348 4 0.232505 5 0.199640 B 1 0.381681 2 0.284957 3 0.259003 4 0.241432 5 0.197692 C 1 0.859803 2 0.823075 3 0.774576 4 0.613309 5 0.607444 D 1 0.815492 2 0.666928 3 0.628147 4 0.554344 5 0.506123 dtype: float64
整个过程完全依赖Pandas的分组、排序和索引操作,不需要额外工具~
内容的提问来源于stack exchange,提问作者mathcounterexamples.net
相关产品推荐
相关产品推荐

