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

如何在Pandas中实现表格行转列的转换?

Pandas实现DataFrame格式转换方案

完全可以用Pandas实现这种格式转换,以下是具体步骤和代码:

1. 构建原始DataFrame

import pandas as pd

# 模拟你的原始数据
data = {
    'metric': ['team_1_count', 'team_1_sum', 'team_2_count', 'team_2_sum'],
    'all_areas': [30, 1146, 38, 1146],
    'area_1': [31, 536, 38, 536],
    'area_2': [31, 308, 41, 308]
}
df = pd.DataFrame(data)

2. 格式转换步骤

这里提供两种简洁的实现方式:

方法一:拆分列+转置

# 拆分metric列,提取团队标识和指标类型
df[['team_prefix', 'team_num', 'metric_type']] = df['metric'].str.split('_', expand=True)
df['team'] = df['team_prefix'] + '_' + df['team_num']

# 移除冗余列,设置复合索引后转置
df_clean = df.drop(['metric', 'team_prefix', 'team_num'], axis=1)
result = df_clean.set_index(['team', 'metric_type']).T

# 调整列层级顺序,让指标类型(count/sum)作为上层列
result = result.swaplevel(axis=1).sort_index(axis=1)

方法二:melt转长格式+pivot重塑

# 先将宽表转成窄表
melted_df = df.melt(id_vars='metric', var_name='area', value_name='value')

# 拆分metric字段,提取团队和指标类型
melted_df[['team', 'metric_type']] = melted_df['metric'].str.split('_', n=2, expand=True).apply(lambda x: (x[0]+'_'+x[1], x[2]), axis=1, result_type='expand')

# 重塑成目标格式
result = melted_df.pivot(index='area', columns=['metric_type', 'team'], values='value')

最终效果

执行上述代码后,result的结构就会和你目标格式一致:

  • 行索引为各个区域(all_areas、area_1、area_2)
  • 列是双层索引:上层为count/sum,下层为team_1/team_2,对应每个区域的各项数值

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

相关产品推荐
方舟 Agent Plan

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

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