通常情况下,你可能想在pandas数据透视表中添加小计。
幸运的是,使用pandas的内置函数很容易做到这一点。
下面的例子展示了如何做到这一点。
例子:向Pandas数据透视表添加小计
假设我们有如下的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'],
'all_star': ['Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'Y'],
'points': [4, 4, 6, 8, 9, 5, 5, 12]})
#view DataFrame
print(df)
team position all_star points
0 A G Y 4
1 A G N 4
2 A F Y 6
3 A F Y 8
4 B G N 9
5 B F N 5
6 B F N 5
7 B F Y 12
我们可以使用下面的代码在pandas中创建一个透视表,显示DataFrame中球队、全明星和位置的每个组合的得分之和。
#create pivot table
my_table = pd.pivot_table(df, values='points',
index=['team', 'all_star'],
columns='position',
aggfunc='sum')
#view pivot table
print(my_table)
position F G
team all_star
A N NaN 4.0
Y 14.0 4.0
B N 10.0 9.0
Y 12.0 NaN
现在,假设我们想添加一个小计行,显示每个球队和位置的积分小计。
我们可以使用下面的语法来做到这一点。
#add subtotals row to pivot table
pd.concat([
y.append(y.sum().rename((x, 'Total')))
for x, y in my_table.groupby(level=0)
]).append(my_table.sum().rename(('Grand', 'Total')))
position F G
team all_star
A N NaN 4.0
Y 7.0 4.0
Total 7.0 8.0
B N 5.0 9.0
Y 12.0 NaN
Total 17.0 9.0
Grand Total 24.0 17.0
现在我们有两行小计,显示每个球队和位置的积分小计,还有一行大计,显示每列的大计。
注意:你可以在这里找到pandaspivot_table()函数的完整文档。
其他资源
下面的教程解释了如何在pandas中执行其他常见操作:
Pandas:如何用数值计数创建透视表
Pandas:如何用零替换透视表中的NaN值
Pandas:如何将透视表转换为DataFrame