📅  最后修改于: 2023-12-03 15:18:35.831000             🧑  作者: Mango
在 Pandas 中,通过 pivot_table 方法可以方便地对数据进行透视分析和聚合操作。其中,aggfunc 参数用于指定对于数据进行聚合时所采用的聚合函数。本文将对该参数进行详细介绍。
在 pivot_table 方法中,aggfunc 参数接收一个聚合函数(如 sum
、mean
等),用于对数据进行聚合操作。例如,可以按照某一(些)列的取值进行分组,并计算另一列的总和、平均值等统计量。
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [2, 4, 6, 8, 10, 12, 14, 16]
})
# 对 A 和 B 列分别进行分组,并计算 C 和 D 列的平均值和总和
result = df.pivot_table(values=['C', 'D'], index=['A', 'B'], aggfunc=['mean', 'sum'])
print(result)
运行上述代码,得到的结果如下:
mean sum
C D C D
A B
bar one 2.0 4 2 4
three 4.0 8 4 8
two 5.5 13 6 13
foo one 4.0 18 8 36
three 8.0 16 8 16
two 4.0 16 8 32
其中,左侧的两个层级为分组所用的列,右侧的 mean
和 sum
分别表示计算平均值和总和的函数。
除了 Pandas 提供的内置聚合函数,用户还可以自定义聚合函数来处理数据。自定义聚合函数需要接收一个 pandas 的 Series(表示用于计算的数据列)作为输入,并返回一个标量值作为计算结果。
下面的例子展示了如何使用自定义的聚合函数来计算数据的乘积:
import pandas as pd
def my_product(series):
return series.prod()
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [2, 4, 6, 8, 10, 12, 14, 16]
})
# 对 A 和 B 列分别进行分组,并计算 C 和 D 列的乘积
result = df.pivot_table(values=['C', 'D'], index=['A', 'B'], aggfunc=my_product)
print(result)
运行上述代码,得到的结果如下:
C D
A B
bar one 2 4
three 4 8
two 15 156
foo one 7 28
three 8 16
two 15 60
在 pivot_table 方法中,aggfunc 参数还可以接收一组聚合函数(放在列表或元组中),用于对数据进行多次聚合操作。
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [2, 4, 6, 8, 10, 12, 14, 16]
})
# 对 A 和 B 列分别进行分组,并计算 C 和 D 列的最大值和最小值
result = df.pivot_table(values=['C', 'D'], index=['A', 'B'], aggfunc=['max', 'min'])
print(result)
运行上述代码,得到的结果如下:
max min
C D C D
A B
bar one 2 4 2 4
three 4 8 4 8
two 6 12 3 6
foo one 7 14 1 2
three 8 16 8 16
two 5 10 3 6
在 pivot_table 中,aggfunc 还允许指定不同的聚合函数用于不同的列。以字典的形式传入,键为列名,值为聚合函数(也可以是一个聚合函数列表)。
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [2, 4, 6, 8, 10, 12, 14, 16],
'E': [1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5]
})
# 对 A 和 B 列分别进行分组,对 C 和 D 列计算最大值,对 E 列计算平均值
result = df.pivot_table(
index=['A', 'B'],
values={'C': 'max', 'D': 'max', 'E': ['mean', 'min']}
)
print(result)
运行上述代码,得到的结果如下:
C D E
max max mean min
A B
bar one 2 4 1.5 1.0
three 4 8 2.5 2.0
two 6 12 3.0 2.5
foo one 7 16 2.5 1.0
three 8 16 4.5 4.0
two 5 10 3.0 2.0