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

pandas多层索引DataFrame执行unstack时如何保留指定列不变

解法

报错原因

你之前的写法报错是因为*meter和Sleeper是原始df列MultiIndex的层级名称,不是普通列名*,直接调用set_index自然找不到对应字段抛出KeyError。

实现思路

把不需要展开的data3列单独拆分出来保留,仅对data1、data2执行unstack操作,最后按行索引匹配合并两部分数据即可。

完整代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame(
    np.arange(2, 11).reshape(-1, 3),
    index=list('ABC'),
    columns=pd.MultiIndex.from_arrays([
        ['data1', 'data2','data3'],
        ['F', 'K',''],
        ['', '','']
    ], names=['meter', 'Sleeper',''])
).rename_axis('Index')

# 拆分需要展开的部分和保留的data3列
df_data3 = df['data3'].reset_index().rename(columns={('',''):'data3'})
df_to_unstack = df.drop('data3', axis=1, level=0)

# 执行unstack操作
df_unstacked = df_to_unstack.unstack().reset_index().rename(columns={0:'value'})

# 合并得到最终结果
result = df_unstacked.merge(df_data3, on='Index')

最终结果示例

meterSleeperIndexvaluedata3
data1FA24
data1FB57
data1FC810
data2KA34
data2KB67
data2KC910

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:27:02