如何在 Pandas 中使用 agg 函数来应用自定义函数
在数据分析过程中,经常需要对数据集进行汇总或者聚合操作。Pandas 是 Python 数据分析库中一个非常强大的工具,它提供了广泛的功能来处理和分析数据。其中,agg()
函数是一个非常有用的方法,它允许用户对数据进行自定义的聚合操作。本文将详细介绍如何在 Pandas 中使用 agg()
函数来应用自定义函数,以及如何通过多种示例来展示其强大的功能。
1. agg()
函数简介
在 Pandas 中,agg()
函数是用来聚合数据的一种方法,它可以接受一个或多个操作以应用于数据集。通过使用 agg()
函数,你可以对数据集进行求和、平均、计数等多种聚合操作。更重要的是,agg()
函数还支持自定义函数,这使得数据聚合更加灵活和强大。
2. 使用 agg()
函数应用自定义函数
自定义函数允许你定义具体的逻辑来聚合数据。这些函数可以是简单的Python函数,也可以是更复杂的函数。在使用 agg()
函数时,你可以将这些自定义函数作为参数传递。
示例代码 1: 基本的自定义聚合函数
import pandas as pd
import numpy as np
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [100, 150, 200]}
df = pd.DataFrame(data)
# 自定义聚合函数
def total_sales(series):
return np.sum(series)
# 使用 agg() 应用自定义函数
result = df.agg({'Sales': total_sales})
print(result)
示例代码 2: 使用 lambda 函数进行聚合
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [120, 180, 240]}
df = pd.DataFrame(data)
# 使用 lambda 函数进行聚合
result = df.agg({'Sales': lambda x: x.max() - x.min()})
print(result)
Output:
示例代码 3: 对多列使用不同的聚合函数
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [130, 190, 250],
'Customers': [30, 45, 50]}
df = pd.DataFrame(data)
# 使用自定义函数和内置函数进行聚合
result = df.agg({'Sales': 'sum', 'Customers': 'mean'})
print(result)
Output:
示例代码 4: 在同一列上应用多个聚合函数
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [140, 200, 260]}
df = pd.DataFrame(data)
# 在同一列上应用多个聚合函数
result = df.agg({'Sales': ['sum', 'mean', 'std']})
print(result)
Output:
示例代码 5: 使用自定义函数聚合整个 DataFrame
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [150, 210, 270]}
df = pd.DataFrame(data)
# 自定义函数处理整个 DataFrame
def custom_agg(dataframe):
return dataframe['Sales'].sum()
# 应用自定义函数
result = df.agg(custom_agg)
print(result)
示例代码 6: 结合 groupby()
和 agg()
使用自定义函数
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Region': ['East', 'West', 'East'],
'Sales': [160, 220, 280]}
df = pd.DataFrame(data)
# 自定义函数计算平均销售
def average_sales(series):
return series.mean()
# 结合 groupby() 和 agg()
result = df.groupby('Region').agg({'Sales': average_sales})
print(result)
Output:
示例代码 7: 多个自定义函数在 groupby()
后使用
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Region': ['North', 'South', 'North'],
'Sales': [170, 230, 290]}
df = pd.DataFrame(data)
# 自定义函数列表
def max_sales(series):
return series.max()
def min_sales(series):
return series.min()
# 应用多个自定义函数
result = df.groupby('Region').agg({'Sales': [max_sales, min_sales]})
print(result)
Output:
示例代码 8: 使用自定义函数对 DataFrame 的特定行进行聚合
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [180, 240, 300]}
df = pd.DataFrame(data)
# 自定义函数聚合特定行
def custom_row_agg(dataframe):
return dataframe.iloc[0]['Sales'] + dataframe.iloc[1]['Sales']
# 应用自定义函数
result = df.agg(custom_row_agg)
print(result)
示例代码 9: 结合条件语句的自定义聚合函数
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [190, 250, 310]}
df = pd.DataFrame(data)
# 自定义函数包含条件语句
def conditional_agg(series):
return series[series > 200].sum()
# 应用自定义函数
result = df.agg({'Sales': conditional_agg})
print(result)
Output:
示例代码 10: 使用自定义函数对多个列进行不同的聚合操作
import pandas as pd
# 创建示例数据
data = {'Product': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'Sales': [200, 260, 320],
'Customers': [35, 50, 55]}
df = pd.DataFrame(data)
# 自定义函数进行不同的聚合操作
def sum_sales(series):
return series.sum()
def average_customers(series):
return series.mean()
# 应用自定义函数
result = df.agg({'Sales': sum_sales, 'Customers': average_customers})
print(result)
Output:
以上示例展示了如何在 Pandas 中使用 agg()
函数结合自定义函数进行数据聚合。通过这些示例,可以看到 agg()
函数的灵活性和强大功能,使得数据分析过程更加高效和精确。