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

如何调整带有MultiIndex多层索引的Pandas DataFrame结构

问题原因

你之前代码仅保留首个索引对应数值的核心原因是:使用xs提取指定二级索引的数据时,默认保留原有一级索引作为行索引,后续concat操作默认按行索引对齐合并,若不同number对应的行索引没有完全匹配,就会出现数据缺失的问题。

修正方案

import pandas as pd
from functools import reduce

numbers = [100,50,20,10,5,2,1]
df_list = []

for number in numbers:
    # 提取对应二级索引数据,同时将一级索引转为普通列作为合并关联键
    temp_series = df['First_column_value_name'].xs(key=number, level='Second_multiindex_column_name')
    temp_df = temp_series.reset_index().rename(columns={'First_column_value_name': f'{number}_R'})
    df_list.append(temp_df)

# 外连接合并保证所有索引的数值都完整保留,将参数中的「你原来的一级索引列名」替换为你实际的一级索引列名称即可
df_positions_as_columns = reduce(
    lambda left, right: pd.merge(left, right, on='你原来的一级索引列名', how='outer'),
    df_list
)

# 若需要将原来的一级索引恢复为行索引,执行下行代码
# df_positions_as_columns = df_positions_as_columns.set_index('你原来的一级索引列名')

关键修改点

  • 提取每个number对应的数据时新增reset_index()操作,将行索引转为普通列作为合并的公共关联键
  • 替换原有concat为外连接merge操作,不管索引是否在所有number中存在,都会保留对应数值,不会丢失数据
  • 重命名时直接生成{number}_R格式列名,不需要额外单独赋值列名列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:01