Pandas中对多列使用agg函数的详细指南
参考:pandas agg multiple columns
Pandas是Python的一个强大的数据处理库,它提供了大量的功能来方便数据分析师进行数据处理、清洗、分析等工作。在数据分析中,经常需要对数据集中的多个列进行聚合操作,以提取有用的统计信息。本文将详细介绍如何在Pandas中使用agg
函数对多列进行聚合操作,并提供多个示例代码以帮助理解和实践。
1. Pandas agg
函数简介
在Pandas中,agg
是一个非常有用的函数,它允许用户对DataFrame的列应用一个或多个操作。这些操作可以是统计总结,也可以是更复杂的自定义函数。使用agg
函数可以在单个表达式中处理多个聚合操作,极大地提高了代码的简洁性和执行效率。
2. 对单列使用agg
函数
在介绍多列聚合之前,我们先简单回顾一下如何对单列使用agg
函数。
示例代码 1: 单列聚合
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对列A进行聚合
result = df['A'].agg(['sum', 'mean'])
print(result)
Output:
3. 对多列使用agg
函数
当需要同时对多个列进行聚合操作时,agg
函数显得尤为有用。你可以指定一个字典,其中的键是DataFrame中的列名,值是需要应用的函数列表。
示例代码 2: 多列聚合
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对列A和B同时进行聚合
result = df.agg({
'A': ['sum', 'min'],
'B': ['max', 'mean']
})
print(result)
Output:
4. 使用自定义函数进行聚合
Pandas的agg
函数也支持使用自定义函数进行聚合,这为数据分析提供了极大的灵活性。
示例代码 3: 使用自定义函数聚合
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 定义一个自定义聚合函数
def my_custom_function(x):
return x.max() - x.min()
# 使用自定义函数进行聚合
result = df.agg({
'A': my_custom_function,
'B': my_custom_function
})
print(result)
Output:
5. 对所有列应用相同的聚合函数
有时候,我们可能需要对DataFrame中的所有数值列应用相同的聚合函数。这可以通过简单地将函数名称作为字符串传递给agg
函数来实现。
示例代码 4: 对所有列应用相同的聚合函数
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对所有数值列应用相同的聚合函数
result = df.agg('sum')
print(result)
Output:
6. 聚合多个列并返回多级列
在使用agg
函数进行多列聚合时,如果对同一列应用了多个聚合函数,Pandas会自动创建多级列。这使得结果的组织更为清晰,也方便后续的数据处理。
示例代码 5: 聚合多个列并返回多级列
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对列A和B进行多个聚合操作
result = df.agg({
'A': ['sum', 'mean', 'max'],
'B': ['sum', 'mean', 'min']
})
print(result)
Output:
7. 使用agg
进行条件聚合
有时候,我们需要根据某些条件对列进行聚合。这可以通过在自定义函数中添加条件语句来实现。
示例代码 6: 使用agg
进行条件聚合
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 定义一个条件聚合函数
def conditional_agg(x):
return x[x > 2].sum()
# 使用条件聚合函数
result = df.agg({
'A': conditional_agg,
'B': conditional_agg
})
print(result)
Output:
8. 结合groupby
和agg
使用
在Pandas中,groupby
和agg
经常一起使用,以对数据进行分组后再聚合。这是数据分析中常见的一个操作,用于分析不同组内的数据统计特征。
示例代码 7: 结合groupby
和agg
使用
import pandas as pd
# 创建示例DataFrame
data = {
'Group': ['G1', 'G1', 'G2', 'G2'],
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 使用groupby和agg
result = df.groupby('Group').agg({
'A': ['sum', 'mean'],
'B': ['max', 'min']
})
print(result)
Output:
9. 更多示例代码
为了进一步加深理解,以下提供更多关于使用agg
函数的示例代码。
示例代码 8: 对指定列应用多个不同的聚合函数
import pandas as pd
# 创建示例DataFrame
data = {
'A': [10, 20, 30, 40],
'B': [50, 60, 70, 80],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对列A应用sum和mean,对列B应用max和min
result = df.agg({
'A': ['sum', 'mean'],
'B': ['max', 'min']
})
print(result)
Output:
示例代码 9: 使用lambda函数进行聚合
import pandas as pd
# 创建示例DataFrame
data = {
'A': [100, 200, 300, 400],
'B': [500, 600, 700, 800],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 使用lambda函数对列A进行聚合
result = df['A'].agg(lambda x: x.max() - x.min())
print(result)
Output:
示例代码 10: 对DataFrame的所有数值列应用多个聚合函数
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1000, 2000, 3000, 4000],
'B': [5000, 6000, 7000, 8000],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对所有数值列应用sum和mean聚合函数
result = df.agg(['sum', 'mean'])
print(result)
示例代码 11: 结合条件过滤和聚合
import pandas as pd
# 创建示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 对列A进行条件过滤后聚合
result = df[df['A'] > 2].agg({
'A': ['sum', 'mean'],
'B': ['max', 'min']
})
print(result)
Output:
示例代码 12: 使用自定义函数对多个列进行不同的聚合操作
import pandas as pd
# 创建示例DataFrame
data = {
'A': [10, 20, 30, 40],
'B': [50, 60, 70, 80],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
# 定义自定义聚合函数
def range_func(x):
return x.max() - x.min()
# 对列A和B使用不同的聚合函数
result = df.agg({
'A': range_func,
'B': 'mean'
})
print(result)
Output:
通过这些示例,我们可以看到Pandas的agg
函数不仅支持内置的聚合函数,如sum
、mean
等,还可以通过自定义函数或lambda表达式来实现更复杂的聚合逻辑。这些功能使得Pandas在数据处理和分析中非常灵活和强大。