如何使用Pandas将DataFrame的二级索引转换为列索引
没问题,这其实是个典型的**DataFrame重塑(reshape)**需求——把长格式的表转成宽格式,用pandas的pivot方法就能轻松实现,给你一步步演示:
首先,先还原你的原始数据:
import pandas as pd df = pd.DataFrame({ 'value': [1, 1, 2, 2], 'idx1': ['a', 'b', 'a', 'b'], 'idx2': [9, 8, 7, 6] })
然后一行核心代码完成转换,再做一点点格式调整让它完全匹配你的目标结构:
# 核心逻辑:以value为行基准,idx1的唯一值为列,填充idx2的对应值 result = df.pivot(index='value', columns='idx1', values='idx2') # 去掉列索引的默认名称(避免保留'idx1'这个表头) result.columns.name = None # 把原来的行索引'value'转成列,并改名为你要的'idx1' result = result.reset_index().rename(columns={'value': 'idx1'})
运行后输出的result就是你想要的格式:
| idx1 | a | b |
|---|---|---|
| 1 | 9 | 8 |
| 2 | 7 | 6 |
简单拆解下pivot的关键参数:
index:指定要作为新表行标识的列(这里用value的数值当行号)columns:指定要展开成新表列的字段(这里把idx1的'a'、'b'拆成两列)values:指定填充到新表单元格里的具体数值(这里用idx2的数字)
如果你的数据存在重复的(value, idx1)组合,那可以用pivot_table并指定聚合函数(比如aggfunc='mean')来处理,不过你的示例数据没有重复情况,pivot就完全够用啦~
内容的提问来源于stack exchange,提问作者sepupumarleen
相关产品推荐
相关产品推荐

