pandas的pivot_table与excel的数据透视表非常相近,实现的是一致的功能
先看看基本的pivot方法,主要功能是重塑数据
创建示例数据
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6],
'level': ['A', 'B', 'C', 'A', 'B', 'C'],
'sex': ['F', 'M', 'F', 'F', 'M', 'F'],
'score': [60, 80, 75, 70, 85, 65],
})
In [42]: df
Out[42]:
id level sex score
0 1 A F 60
1 2 B M 80
2 3 C F 75
3 4 A F 70
4 5 B M 85
5 6 C F 65
重塑为sex为行, level为列,score为分数
df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6],
'level': ['A', 'B', 'C', 'A', 'B', 'C'],
'sex': ['F', 'F', 'F', 'M', 'M', 'M'],
'score': [60, 80, 75, 70, 85, 65],
})
df.pivot(index='sex', columns='level', values='score')
Out[54]:
level A B C
sex
F 60 80 75
M 70 85 65
如果不指定value,会对剩余的列都进行展示
df.pivot(index='sex', columns='level')
Out[55]:
id score
level A B C A B C
sex
F 1 2 3 60 80 75
M 4 5 6 70 85 65
pivot_table的操作更加类似excel的数据透视表
In [56]: pd.pivot_table(df, index=['level', 'sex'])
Out[56]:
id score
level sex
A F 1 60
M 4 70
B F 2 80
M 5 85
C F 3 75
M 6 65
类似上面的pivot
In [57]: pd.pivot_table(df, index=['sex'], columns='level', values='score')
Out[57]:
level A B C
sex
F 60 80 75
M 70 85 65
aggfunc可以执行聚合运算,支持自定义的函数
pd.pivot_table(df, index=['sex'], columns='level', values='score', aggfunc=lambda e: e/2)
Out[58]:
level A B C
sex
F 30.0 40.0 37.5
M 35.0 42.5 32.5
最主要的区别在于:
pivot:仅支持数据重塑
pivot_table:支持数据重塑外,还支持数据聚合
未完待续~~~