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

如何将DataFrame的分层列名转换为索引并调整数据结构?

解决方法

你可以通过Pandas的reset_index、melt和pivot方法组合实现这个转换,具体操作如下:

1. 模拟原始DataFrame(如果已有数据可跳过)

import pandas as pd

# 构造和你结构一致的示例数据
data = {
    ('Rotterdam', 'HSFO'): [453.318, 448.266],
    ('Singapore', 'HSFO'): [461.028, 454.016],
    ('Rotterdam', 'MGO'): [723.833, 735.000],
    ('Singapore', 'MGO'): [734.0485, 738.74945],
    ('Rotterdam', 'VLSFO'): [518.098, 513.596],
    ('Singapore', 'VLSFO'): [553.426, 549.716]
}
df = pd.DataFrame(data, index=['Jul 23', 'Aug 23'])
df.index.name = 'period'
df.columns.names = ['Bunker Port', 'bunker']

2. 执行格式转换

# 把period索引转为普通列
df_reset = df.reset_index()

# 将多级列拆分为长格式数据,提取港口、燃料类型和对应数值
melted = df_reset.melt(id_vars='period', var_name=['Bunker Port', 'bunker'], value_name='value')

# 透视转换,将燃料类型转为列,period和港口作为行
result = melted.pivot(index=['period', 'Bunker Port'], columns='bunker', values='value').reset_index()

# 调整列顺序匹配目标结构
result = result[['period', 'Bunker Port', 'HSFO', 'MGO', 'VLSFO']]

# 设置多级列标题,和目标格式完全对齐
result.columns = pd.MultiIndex.from_tuples(
    [('', 'period'), ('', 'Bunker Port'), ('bunker', 'HSFO'), ('bunker', 'MGO'), ('bunker', 'VLSFO')]
)

# 查看最终结果
print(result)

执行后得到的结构和你需求完全一致,自动生成的0-4索引可通过result = result.set_index([('', 'period'), ('', 'Bunker Port')])移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:12:23