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

如何基于列名将含州标识的宽格式DataFrame转换为长格式?

Pandas宽表转长表(带前缀列名)解决方案

代码实现

首先构造示例数据(若你已有现成DataFrame,可跳过此步):

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'id': [1, 2, 3],
    'university': ['abc', 'def', 'ijk'],
    '# CA Holiday': [1, 5, 1],
    '# CA Hours': [5, np.nan, 5],
    '# WA Holiday': [np.nan, 3, np.nan],
    '# WA Hours': [3, 7, 3]
})

执行数据转换:

# 1. 将宽表转为长表,保留id和university作为标识列
melted_df = df.melt(id_vars=['id', 'university'], var_name='combined_col', value_name='value')

# 2. 拆分合并列名,提取州名和指标类型
melted_df[['Holiday_State', 'Metric']] = melted_df['combined_col'].str.lstrip('# ').str.split(' ', expand=True)

# 3. 将指标列转回宽表,得到目标格式
final_df = melted_df.pivot_table(
    index=['id', 'university', 'Holiday_State'],
    columns='Metric',
    values='value',
    aggfunc='first'
).reset_index()

# 移除列名层级标签
final_df.columns.name = None

转换结果

运行后得到的final_df格式如下:

id university Holiday_State  Holiday  Hours
0   1        abc            CA      1.0    5.0
1   1        abc            WA      NaN    3.0
2   2        def            CA      5.0    NaN
3   2        def            WA      3.0    7.0
4   3        ijk            CA      1.0    5.0
5   3        ijk            WA      NaN    3.0

说明

这个方法灵活适配带前缀的列名格式,若后续列名前缀有变化,只需调整str.lstrip()的参数即可兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:23:32