类似excel的数据透视表功能,pandas提供了pivot_table和pivot实现数据透视表的功能,具体过程是:分组→聚合→展示。
语法: pandas.pivot_table(data, index=None, columns=None, values=None, aggfunc=‘mean’, fill_value=None, dropna=True, margins=False, margins_name=‘All’, observed=False)
Parameters:
df = pd.DataFrame({'学校':['一中', '一中', '一中', '一中', '一中', '一中', '一中', '一中', '一中', '一中', '二中', '二中', '二中', '二中', '二中', '二中'],
'班级':['1班', '1班', '1班', '1班', '1班', '1班', '2班', '2班', '2班', '3班', '1班', '1班', '1班', '2班', '2班', '2班'],
'组别':['1组', '1组', '2组', '2组', '2组', '2组', '1组', '2组', '3组', '1组', '1组', '1组', '2组', '1组', '1组', '2组'],
'姓名':['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'],
'身高':[165, 165, 160, 160, 160, 160, 158, 150, 157, 170, 175, 175, 180, 176, 176, 177],
'体重':[45, 45, 55, 55, 55, 55, 54, 46, 60, 65, 70, 70, 75, 73, 73, 76],
'数学成绩':[65, 65, 75, 75, 75, 75, 74, 66, 80, 85, 90, 90, 95, 93, 93, 96]})
df
Out[57]:
学校 班级 组别 姓名 身高 体重 数学成绩
0 一中 1班 1组 a 165 45 65
1 一中 1班 1组 b 165 45 65
2 一中 1班 2组 c 160 55 75
3 一中 1班 2组 d 160 55 75
4 一中 1班 2组 e 160 55 75
5 一中 1班 2组 f 160 55 75
6 一中 2班 1组 g 158 54 74
7 一中 2班 2组 h 150 46 66
8 一中 2班 3组 i 157 60 80
9 一中 3班 1组 j 170 65 85
10 二中 1班 1组 k 175 70 90
11 二中 1班 1组 l 175 70 90
12 二中 1班 2组 m 180 75 95
13 二中 2班 1组 n 176 73 93
14 二中 2班 1组 o 176 73 93
15 二中 2班 2组 p 177 76 96
pd.pivot_table(df, index=['学校', '班级'], columns=['组别'], values=['身高', '体重'], aggfunc={'身高':'sum', '体重':['max', 'min']}, fill_value='missing')
#结果见下:
语法: pandas.pivot(data, index=None, columns=None, values=None)
参数说明: 与pivot_table类似
df = pd.DataFrame({"foo": ['one', 'one', 'two', 'two'],
"bar": ['A', 'A', 'B', 'C'],
"baz": [1, 2, 3, 4]})
df
Out[69]:
foo bar baz
0 one A 1
1 one A 2
2 two B 3
3 two C 4
df.pivot(index='foo', columns='bar', values='baz')
Traceback (most recent call last):
...
ValueError: Index contains duplicate entries, cannot reshape