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

如何在Pandas中将外层列索引转换为Source列并重塑数据?

解决方案

你的需求是将多层列索引的DataFrame转换为长格式,核心是把外层的source列索引转为单独的Source列,同时保留内层的指标列并按水果重复对应source的数据。以下是具体实现步骤:

步骤1:确认原DataFrame结构

假设你的DataFrame名为df,列是多层索引(MultiIndex):

  • 外层索引名为source,取值为1、10、20
  • 内层索引为指标名:Ripeness、Tastiness
  • 行索引为水果名称:Apple、Banana、Pear

步骤2:使用pandas的stack()方法转换

stack()可以将指定层级的列索引转换为行索引,再通过reset_index()将行索引转为普通列,最后调整列顺序即可得到目标格式:

import pandas as pd

# (可选)如果内层列索引没有名称,先设置列索引的名称
df.columns.names = ['source', 'metric']

# 转换核心代码
df_transformed = df.stack(level='source').reset_index()

# 重命名列并调整顺序,匹配目标格式
df_transformed = df_transformed.rename(columns={'source': 'Source'})
df_transformed = df_transformed[['Ripeness', 'Tastiness', 'Source']]

模拟示例验证

如果你没有实际数据,可以用以下模拟代码测试:

# 构造模拟原DataFrame
data = {
    (1, 'Ripeness'): [4, 6, 3],
    (1, 'Tastiness'): [10, 5, 5],
    (10, 'Ripeness'): [7, 8, 2],
    (10, 'Tastiness'): [8, 6, 4],
    (20, 'Ripeness'): [5, 9, 4],
    (20, 'Tastiness'): [9, 7, 6]
}
df = pd.DataFrame(data, index=['Apple', 'Banana', 'Pear'])
df.columns.names = ['source', 'metric']

# 执行转换
df_transformed = df.stack(level='source').reset_index().rename(columns={'source': 'Source'})
df_transformed = df_transformed[['Ripeness', 'Tastiness', 'Source']]

print(df_transformed)

输出结果会完全匹配你想要的格式:

Ripeness  Tastiness  Source
Apple            4         10       1
Banana           6          5       1
Pear             3          5       1
Apple            7          8      10
Banana           8          6      10
Pear             2          4      10
Apple            5          9      20
Banana           9          7      20
Pear             4          6      20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:42:55