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

如何用Python Pandas将同Faculty ID行转为Measure ID为列的格式

使用Pandas将长格式数据集转为宽格式

问题描述

我们有如下长格式的数据集:

Faculty ID   Measure ID   Score
0        10001          EDV    high
1        10001        IMM_3      99
2        10001       OP_18b     196
5        10001        OP_22       2
7        10001        OP_29     100
10       10001        PC_01       0
11       10001        SEP_1      56
12       10001   SEP_SH_3HR      89
14       10001  SEV_SEP_3HR      73
15       10001  SEV_SEP_6HR      84
16       10005          EDV    high
17       10005        IMM_3      93
18       10005       OP_18b     141
19       10005       OP_18c     311
21       10005        OP_22       2
22       10005        OP_23     100
23       10005        OP_29      93
26       10005        PC_01       1
27       10005        SEP_1      61
28       10005   SEP_SH_3HR      83
29       10005   SEP_SH_6HR      74
30       10005  SEV_SEP_3HR      83
31       10005  SEV_SEP_6HR      97
32       10006          EDV  medium
33       10006        IMM_3      82
34       10006       OP_18b     176
37       10006        OP_22       2
38       10006        OP_23      58
39       10006        OP_29      80
42       10006        PC_01       0
43       10006        SEP_1      37
44       10006   SEP_SH_3HR      80
46       10006  SEV_SEP_3HR      62
47       10006  SEV_SEP_6HR      74
48       10007          EDV     low
49       10007        IMM_3      72

需要将其转换为宽格式,以Faculty ID作为唯一标识,Measure ID的取值作为表头,Score作为对应列的内容,预期效果如下:

Faculty ID   EDV   IMM_3   OP_18b   OP_22   OP_29   PC_01   SEP_1   SEP_SH_3HR  SEV_SEP_3HR  SEV_SEP_6HR  OP_18c  OP_23  SEP_SH_6HR
0        10001  high      99      196       2     100       0      56           89           73           84     NaN    NaN         NaN
1        10005  high      93      141       2      93       1      61           83           83           97     311    100          74
2        10006 medium      82      176       2      80       0      37           80           62           74     NaN     58         NaN
3        10007   low      72      NaN     NaN     NaN     NaN     NaN          NaN          NaN          NaN     NaN    NaN         NaN

解决方案

可以直接使用Pandas的pivot方法实现长表转宽表,核心代码如下:

import pandas as pd

# 假设原始数据已加载到DataFrame df中
df = pd.DataFrame({
    'Faculty ID': [10001,10001,10001,10001,10001,10001,10001,10001,10001,10001,10005,10005,10005,10005,10005,10005,10005,10005,10005,10005,10005,10005,10006,10006,10006,10006,10006,10006,10006,10006,10006,10006,10007,10007],
    'Measure ID': ['EDV','IMM_3','OP_18b','OP_22','OP_29','PC_01','SEP_1','SEP_SH_3HR','SEV_SEP_3HR','SEV_SEP_6HR','EDV','IMM_3','OP_18b','OP_18c','OP_22','OP_23','OP_29','PC_01','SEP_1','SEP_SH_3HR','SEP_SH_6HR','SEV_SEP_3HR','EDV','IMM_3','OP_18b','OP_22','OP_23','OP_29','PC_01','SEP_1','SEP_SH_3HR','SEV_SEP_6HR','EDV','IMM_3'],
    'Score': ['high',99,196,2,100,0,56,89,73,84,'high',93,141,311,2,100,93,1,61,83,74,83,'medium',82,176,2,58,80,0,37,80,74,'low',72]
})

# 重塑数据
wide_df = df.pivot(index='Faculty ID', columns='Measure ID', values='Score').reset_index()

# 移除列名的层级标签(可选)
wide_df.columns.name = None

print(wide_df)

代码说明

  • pivot(index='Faculty ID', columns='Measure ID', values='Score'):指定Faculty ID作为行索引,Measure ID的取值转为列名,Score填充对应列的内容。
  • reset_index():将Faculty ID从索引转回普通列,匹配预期格式。
  • wide_df.columns.name = None:清理表头的层级标签,让输出更简洁。

如果原始数据存在同一Faculty ID+Measure ID的重复记录(同一教师同一指标有多个分数),可以改用pivot_table并指定聚合规则,比如保留第一个值:

wide_df = df.pivot_table(index='Faculty ID', columns='Measure ID', values='Score', aggfunc='first').reset_index()

你也可以根据需求将aggfunc替换为'mean'(均值)、'sum'(求和)等聚合方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:24:24