📜  pivot_table 值 aggfunct (1)

📅  最后修改于: 2023-12-03 15:18:35.831000             🧑  作者: Mango

Pandas 中的 pivot_table 值 aggfunct

在 Pandas 中,通过 pivot_table 方法可以方便地对数据进行透视分析和聚合操作。其中,aggfunc 参数用于指定对于数据进行聚合时所采用的聚合函数。本文将对该参数进行详细介绍。

基本用法

在 pivot_table 方法中,aggfunc 参数接收一个聚合函数(如 summean 等),用于对数据进行聚合操作。例如,可以按照某一(些)列的取值进行分组,并计算另一列的总和、平均值等统计量。

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

其中,左侧的两个层级为分组所用的列,右侧的 meansum 分别表示计算平均值和总和的函数。

自定义聚合函数

除了 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