假设我们有一个学生成绩的数据集,其中包含了每个学生在两次考试中的成绩。数据以宽格式存储,每次考试的成绩分别放在不同的列中。我们希望将这个数据集转换为长格式,以便更好地分析每位学生的成绩变化。
构造数据如下:
import pandas as pd
# 构造宽格式的学生成绩数据
df = pd.DataFrame({
'student_id': [101, 102, 103],
'exam1_math': [85, 90, 78],
'exam1_english': [88, 85, 82],
'exam2_math': [80, 89, 84],
'exam2_english': [86, 87, 81]
})
# 显示原始宽格式数据
df
'''
student_id exam1_math exam1_english exam2_math exam2_english
0 101 85 88 80 86
1 102 90 85 89 87
2 103 78 82 84 81
'''
由于数学和英语成绩在多个列中,我们希望将各科成绩相加。
用 pd.lreshape()
将宽表转为长表,再分组求和。
转为长表:
pd.lreshape(data,
groups={
'math': ['exam1_math', 'exam2_math'],
'english': ['exam1_english', 'exam2_english']
})
'''
student_id math english
0 101 85 88
1 102 90 85
2 103 78 82
3 101 80 86
4 102 89 87
5 103 84 81
'''
分组求和:
(
pd.lreshape(data,
groups={
'math': ['exam1_math', 'exam2_math'],
'english': ['exam1_english', 'exam2_english']
})
.groupby('student_id', as_index=False)
.sum()
)
'''
student_id math english
0 101 165 174
1 102 179 172
2 103 162 163
'''
这样就完成了需求。
(完)
更新时间:Aug. 18, 2024, 4:27 p.m. 标签:pandas python 宽表 长表