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

如何在Jupyter Notebook中使用Pandas转换指定DataFrame结构?

Pandas实现DataFrame宽表转长表(按月份拆分)

示例原始数据

先构造符合需求的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Dept': ['HR', 'Engineering', 'Finance'],
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Jan_Base': [5000, 8000, 6000],
    'Feb_Base': [5200, 8200, 6100],
    'Mar_Base': [5300, 8300, 6200],
    'Jan_Count': [10, 15, 8],
    'Feb_Count': [12, 16, 9],
    'Mar_Count': [11, 17, 10]
})

最优解决方案:wide_to_long

针对这种列名有固定规律(月份_指标)的场景,pd.wide_to_long是最简洁的实现方式:

# 转换宽表为长表
df_transformed = pd.wide_to_long(
    df,
    stubnames=['Base', 'Count'],  # 指定指标列的前缀
    i=['Dept', 'Name'],  # 保留的标识列(不参与转换的列)
    j='Month',  # 新生成的月份列名称
    sep='_',  # 列名中月份与指标的分隔符
    suffix=r'\w+'  # 匹配月份后缀(Jan/Feb/Mar这类字符串)
).reset_index()

# 将月份缩写映射为数字1/2/3
month_mapping = {'Jan': 1, 'Feb': 2, 'Mar': 3}
df_transformed['Month'] = df_transformed['Month'].map(month_mapping)

# 调整列顺序(可选,按需排列)
df_transformed = df_transformed[['Dept', 'Name', 'Month', 'Base', 'Count']]

备选方案:melt + 合并

如果列名规律不强,可使用melt分别处理两类指标后合并:

# 提取Base和Count类列
base_columns = [col for col in df.columns if '_Base' in col]
count_columns = [col for col in df.columns if '_Count' in col]

# 分别转换Base和Count部分
df_base = df.melt(id_vars=['Dept', 'Name'], value_vars=base_columns, var_name='Month', value_name='Base')
df_count = df.melt(id_vars=['Dept', 'Name'], value_vars=count_columns, var_name='Month', value_name='Count')

# 合并结果并处理月份列
df_transformed_melt = pd.merge(df_base, df_count, on=['Dept', 'Name', 'Month'])
df_transformed_melt['Month'] = df_transformed_melt['Month'].str.split('_').str[0].map(month_mapping)

# 调整列顺序
df_transformed_melt = df_transformed_melt[['Dept', 'Name', 'Month', 'Base', 'Count']]

转换后结果示例

最终的df_transformed结构如下:

Dept     Name  Month  Base  Count
0          HR    Alice      1  5000     10
1          HR    Alice      2  5200     12
2          HR    Alice      3  5300     11
3  Engineering      Bob      1  8000     15
4  Engineering      Bob      2  8200     16
5  Engineering      Bob      3  8300     17
6      Finance  Charlie      1  6000      8
7      Finance  Charlie      2  6100      9
8      Finance  Charlie      3  6200     10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:40