Pandas中多列聚合操作详解

Pandas中多列聚合操作详解

参考:pandas agg multiple columns

Pandas 是一个强大的 Python 数据分析工具库,它提供了非常丰富的数据处理功能,其中聚合(Aggregation)操作是数据分析中常用的一种数据处理方式。本文将详细介绍如何在 Pandas 中对多列进行聚合操作,包括基本的聚合函数使用、自定义聚合函数以及多种聚合操作的组合使用等。

1. Pandas 聚合操作基础

在 Pandas 中,聚合操作通常是指对数据集进行一些统计计算,比如求和、平均、最大值、最小值等。Pandas 提供了 agg() 函数,它可以对数据集中的一个或多个列进行聚合计算。

示例代码 1:单列聚合

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 对列A进行求和
result = df['A'].agg('sum')
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 2:多列聚合

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 对列A和列B同时进行求和
result = df[['A', 'B']].agg('sum')
print(result)

Output:

Pandas中多列聚合操作详解

2. 使用多种聚合函数

在 Pandas 中,我们可以对同一列应用多种聚合函数,或者对不同的列应用不同的聚合函数。

示例代码 3:对同一列使用多种聚合函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 对列A同时使用求和和平均数聚合函数
result = df['A'].agg(['sum', 'mean'])
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 4:对不同列使用不同聚合函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 对列A使用求和,对列B使用平均数
result = df.agg({'A': 'sum', 'B': 'mean'})
print(result)

Output:

Pandas中多列聚合操作详解

3. 自定义聚合函数

Pandas 允许用户定义自己的聚合函数,这提供了更高的灵活性。

示例代码 5:使用自定义聚合函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 定义一个自定义聚合函数,计算数值列的范围(最大值-最小值)
def range_func(x):
    return x.max() - x.min()

# 对列A使用自定义的范围函数
result = df['A'].agg(range_func)
print(result)

Output:

Pandas中多列聚合操作详解

4. 聚合操作的高级应用

在实际的数据分析工作中,我们经常需要对数据进行更复杂的聚合操作,比如分组后的聚合等。

示例代码 6:分组后聚合

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,然后对'A'列求和
result = df.groupby('Group')['A'].agg('sum')
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 7:分组后应用多种聚合函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,然后对'A'列同时使用求和和平均数聚合函数
result = df.groupby('Group')['A'].agg(['sum', 'mean'])
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 8:对多个分组列使用不同聚合函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group1': ['X', 'X', 'Y'],
    'Group2': ['A', 'B', 'B'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group1'和'Group2'列分组,然后对'A'列求和,对'B'列求平均
result = df.groupby(['Group1', 'Group2']).agg({'A': 'sum', 'B': 'mean'})
print(result)

Output:

Pandas中多列聚合操作详解

5. 结合使用聚合和其他操作

Pandas 的强大之处在于它可以将聚合操作与其他数据处理操作(如过滤、转换等)结合使用,以实现复杂的数据分析任务。

示例代码 9:聚合后过滤

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,然后对'A'列求和,最后过滤出求和大于3的组
result = df.groupby('Group')['A'].agg('sum').loc[lambda x: x > 3]
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 10:聚合后排序

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,然后对'A'列求和,最后按照求和结果排序
result = df.groupby('Group')['A'].agg('sum').sort_values(ascending=False)
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 11:聚合后重置索引

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,然后对'A'列求和,最后重置索引
result = df.groupby('Group')['A'].agg('sum').reset_index()
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 12:使用自定义聚合函数并结合其他操作

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 定义一个自定义聚合函数,计算数值列的范围(最大值-最小值)
def range_func(x):
    return x.max() - x.min()

# 按照'Group'列分组,对'A'列应用自定义聚合函数,然后对结果进行排序
result = df.groupby('Group')['A'].agg(range_func).sort_values(ascending=False)
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 13:多级分组聚合

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group1': ['X', 'X', 'Y'],
    'Group2': ['A', 'B', 'B'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group1'和'Group2'列分组,然后对'A'列求和
result = df.groupby(['Group1', 'Group2'])['A'].agg('sum')
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 14:结合使用多个聚合函数和多级分组

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group1': ['X', 'X', 'Y'],
    'Group2': ['A', 'B', 'B'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group1'和'Group2'列分组,对'A'列使用求和和平均数聚合函数
result = df.groupby(['Group1', 'Group2'])['A'].agg(['sum', 'mean'])
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 15:聚合后应用转换操作

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'列求和,然后对求和结果应用转换操作,增加10%
result = df.groupby('Group')['A'].agg('sum').transform(lambda x: x * 1.1)
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 16:聚合与过滤结合使用

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'列求和,然后过滤出求和结果大于3的记录
result = df.groupby('Group')['A'].agg('sum').loc[lambda x: x > 3]
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 17:聚合后的数据重塑

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'列求和,然后将结果转换为DataFrame
result = df.groupby('Group')['A'].agg('sum').to_frame()
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 18:结合使用聚合和映射

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'列求和,然后对结果应用映射,将数值映射为对应的字符串
result = df.groupby('Group')['A'].agg('sum').map(lambda x: f"Sum is {x}")
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 19:聚合后的多列排序

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'和'B'列同时求和,然后按照'A'列的结果排序
result = df.groupby('Group')[['A', 'B']].agg('sum').sort_values(by='A', ascending=False)
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 20: 聚合后的数据重命名

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'和'B'列同时求和,然后重命名聚合后的列
result = df.groupby('Group')[['A', 'B']].agg('sum').rename(columns={'A': 'Sum_A', 'B': 'Sum_B'})
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 21:聚合后的数据重命名和格式化

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'和'B'列同时求和,然后重命名聚合后的列并格式化输出
result = df.groupby('Group')[['A', 'B']].agg('sum').rename(columns={'A': 'Total_A', 'B': 'Total_B'}).applymap(lambda x: f"{x:.2f}")
print(result)

示例代码 22:多列聚合并应用不同的聚合函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'列求和,对'B'列求平均,然后重命名聚合后的列
result = df.groupby('Group').agg({'A': 'sum', 'B': 'mean'}).rename(columns={'A': 'Sum_A', 'B': 'Average_B'})
print(result)

Output:

Pandas中多列聚合操作详解

示例代码 23:分组后的数据转换

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,对'A'列求和,并将结果作为新列添加到原始DataFrame中
df['Sum_A_by_Group'] = df.groupby('Group')['A'].transform('sum')
print(df)

Output:

Pandas中多列聚合操作详解

示例代码 24:分组后的数据过滤

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 按照'Group'列分组,过滤出'A'列求和大于3的组
filtered_df = df.groupby('Group').filter(lambda x: x['A'].sum() > 3)
print(filtered_df)

Output:

Pandas中多列聚合操作详解

示例代码 25:分组后的数据应用自定义函数

import pandas as pd

# 创建示例数据
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'Group': ['X', 'X', 'Y'],
    'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)

# 定义一个自定义函数,用于计算每个组中'A'列的最大值与最小值的差
def custom_func(group):
    return group['A'].max() - group['A'].min()

# 按照'Group'列分组,应用自定义函数
result = df.groupby('Group').apply(custom_func)
print(result)

这些示例代码展示了如何使用Pandas进行数据分组、聚合、转换和过滤操作,以及如何应用自定义函数来处理分组数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程