Pandas中使用agg()函数进行去重计数
在数据分析中,经常需要对数据进行汇总统计,其中一个常见的需求是计算某些列的不重复(唯一)值的数量。Pandas库提供了强大的数据处理能力,其中agg()
函数是一个非常有用的工具,可以用来执行多种统计聚合操作,包括去重计数(distinct count)。本文将详细介绍如何在Pandas中使用agg()
函数来进行去重计数,并提供多个示例代码以帮助理解和应用。
1. Pandas简介
Pandas是一个开源的Python数据分析库,它提供了高性能、易用的数据结构和数据分析工具。对于Python科学计算而言,Pandas是不可或缺的工具之一。在Pandas中,最核心的数据结构是DataFrame,它是一个表格型的数据结构,可以用来存储和操作结构化数据。
2. agg()函数概述
agg()
函数是Pandas中用于聚合计算的函数之一,它允许用户对DataFrame或Series对象应用一个或多个操作,实现数据的聚合处理。agg()
函数的灵活性在于可以同时使用多种聚合方法,或对不同的列使用不同的聚合方法。
3. 使用agg()进行去重计数
去重计数是指计算某列中不同值的数量。在Pandas中,通常可以使用nunique()
函数来计算唯一值的数量,而agg()
函数允许我们在聚合时直接使用nunique()
作为参数,从而实现去重计数的目的。
示例代码1:基本的去重计数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 使用agg()进行去重计数
result = df.agg({'A': 'nunique', 'B': 'nunique'})
print(result)
Output:
示例代码2:对多列进行去重计数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 使用agg()对多列进行去重计数
result = df.agg({'A': 'nunique', 'B': 'nunique', 'C': 'nunique'})
print(result)
Output:
示例代码3:结合groupby使用agg()
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 结合groupby使用agg()进行去重计数
result = df.groupby('A').agg({'B': 'nunique', 'C': 'nunique'})
print(result)
Output:
示例代码4:使用自定义函数进行去重计数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 使用自定义函数进行去重计数
def my_nunique(series):
return series.nunique()
result = df.agg({'A': my_nunique, 'B': my_nunique})
print(result)
Output:
示例代码5:对整个DataFrame进行去重计数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 对整个DataFrame进行去重计数
result = df.agg(['nunique'])
print(result)
Output:
示例代码6:在agg()中使用多个函数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 在agg()中使用多个函数
result = df.agg({'A': ['nunique', 'count'], 'B': ['nunique', 'max']})
print(result)
Output:
示例代码7:对不同列使用不同的聚合函数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 对不同列使用不同的聚合函数
result = df.agg({'A': 'nunique', 'B': 'max', 'C': 'min', 'D': 'sum'})
print(result)
Output:
示例代码8:在agg()中使用lambda函数
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 在agg()中使用lambda函数进行去重计数
result = df.agg({'A': lambda x: x.nunique(), 'B': lambda x: x.nunique()})
print(result)
Output:
示例代码9:结合条件过滤使用agg()
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 结合条件过滤使用agg()
filtered_df = df[df['C'] == 'small']
result = filtered_df.agg({'A': 'nunique', 'B': 'nunique'})
print(result)
Output:
示例代码10:使用agg()进行多级分组聚合
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 使用agg()进行多级分组聚合
result = df.groupby(['A', 'B']).agg({'C': 'nunique', 'D': 'sum'})
print(result)
Output:
示例代码11:对Series使用agg()
import pandas as pd
# 创建示例数据
data = [1, 2, 2, 3, 3, 4, 5, 6]
series = pd.Series(data)
# 对Series使用agg()
result = series.agg('nunique')
print(result)
Output:
示例代码12:结合reset_index()使用agg()
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 结合reset_index()使用agg()
result = df.groupby('A').agg({'B': 'nunique'}).reset_index()
print(result)
Output:
示例代码13:使用agg()和sort_values()
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 使用agg()和sort_values()
result = df.groupby('A').agg({'B': 'nunique'}).sort_values(by='B', ascending=False)
print(result)
Output:
示例代码14:结合filter()使用agg()
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 结合filter()使用agg()
filtered_df = df[df['D'] > 2]
result = filtered_df.agg({'A': 'nunique', 'B': 'nunique'})
print(result)
Output:
示例代码15:结合apply()使用agg()
import pandas as pd
# 创建示例数据
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': ['small', 'large', 'large', 'small', 'small', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 结合apply()使用agg()
result = df.apply(lambda x: x.nunique() if x.name in ['A', 'B'] else x.sum())
print(result)
Output:
以上示例展示了如何在不同场景下使用Pandas的agg()
函数进行数据的去重计数和其他聚合操作。通过这些示例,可以看到agg()
函数在数据分析中的强大功能和灵活性。