如何在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
相关产品推荐
相关产品推荐

