你可以使用下面的基本语法在pandas中创建一个透视表,显示某些列的数值之和。
pd.pivot_table(df, values='col1', index='col2', columns='col3', aggfunc='sum')
下面的例子展示了如何在实践中使用这种语法。
例子:创建带有数值之和的潘达斯透视表
假设我们有如下的pandas数据框架,其中包含各种篮球运动员的信息。
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'position': ['G', 'G', 'F', 'F', 'G', 'F', 'F', 'F'],
'points': [4, 4, 6, 8, 9, 5, 5, 12]})
#view DataFrame
print(df)
team position points
0 A G 4
1 A G 4
2 A F 6
3 A F 8
4 B G 9
5 B F 5
6 B F 5
7 B F 12
下面的代码显示了如何在pandas中创建一个透视表,显示DataFrame中每个 "球队 "和 "位置 "的 "得分 "值之和。
#create pivot table
df_pivot = pd.pivot_table(df, values='points', index='team', columns='position',
aggfunc='sum')
#view pivot table
print(df_pivot)
position F G
team
A 14 8
B 22 9
从输出结果中我们可以看到:
- 位于F位置的A队球员共得14分
- 位于G位置的A队球员共得8 分
- 在F位置的B队球员共得22 分
- 处于G位置的B队球员共得9 分
请注意,我们也可以使用margins参数来显示透视表中的保证金总和。
#create pivot table with margins
df_pivot = pd.pivot_table(df, values='points', index='team', columns='position',
aggfunc='sum', margins=True, margins_name='Sum')
#view pivot table
print(df_pivot)
position F G Sum
team
A 14 8 22
B 22 9 31
Sum 36 17 53
现在透视表显示的是行和和列和。
注:你可以在这里找到pandas**pivot_table()**函数的完整文档。
其他资源
下面的教程解释了如何在pandas中执行其他常见操作。
Pandas:如何将数据框架从长形重塑为宽形
Pandas:如何将数据框架从宽形重塑为长形
Pandas:如何通过多列进行分组和聚合