Pandas中使用agg()函数进行去重计数

Pandas中使用agg()函数进行去重计数

参考:pandas agg count distinct

Pandas是一个强大的Python数据分析库,它提供了丰富的数据结构和数据操作方法,使得数据分析变得更加简便。在处理数据时,经常会遇到需要对数据进行聚合分析的需求,比如统计数据中某些列的不重复(唯一)值的数量。本文将详细介绍如何在Pandas中使用agg()函数结合其他函数来进行去重计数。

1. 基本概念

在Pandas中,DataFrame是一种常用的数据结构,它类似于一个二维表格。agg()函数是DataFrameSeries对象的一个方法,用于对数据进行聚合操作,可以一次性应用多个聚合操作。

去重计数通常指的是计算某列或某几列中不同值的数量。在Pandas中,这通常可以通过nunique()函数来实现,该函数返回的是唯一值的数量。

2. 示例代码

下面通过一系列示例代码,展示如何在Pandas中使用agg()函数进行去重计数。

示例1:创建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': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [2, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)
print(df)

Output:

Pandas中使用agg()函数进行去重计数

示例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': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [2, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'A': pd.Series.nunique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例3:多列去重计数

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'A': pd.Series.nunique, 'B': pd.Series.nunique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例4:全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': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [2, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg(pd.Series.nunique)
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例5:结合groupby使用

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.groupby('A').agg({'B': pd.Series.nunique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例6:使用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': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [2, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'A': lambda x: x.nunique()})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例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': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [2, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'A': ['count', pd.Series.nunique]})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例8:对不同列使用不同聚合函数

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'A': pd.Series.nunique, 'C': 'sum'})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例9:结合条件过滤进行聚合

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df[df['C'] > 3].agg({'A': pd.Series.nunique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例10:使用自定义函数进行聚合

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

def count_unique(series):
    return series.nunique()

result = df.agg({'A': count_unique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例11:在groupby后应用多个聚合函数

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.groupby('A').agg({'B': ['count', pd.Series.nunique]})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例12:对整个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': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [2, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.apply(pd.Series.nunique)
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例13:结合reset_index使用

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.groupby('A').agg({'B': pd.Series.nunique}).reset_index()
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例14:使用多级索引进行聚合

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.groupby(['A', 'B']).agg({'C': pd.Series.nunique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例15:对结果进行排序

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'A': pd.Series.nunique, 'B': pd.Series.nunique}).sort_values(by='A')
print(result)

示例16:结合filter使用

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.groupby('A').filter(lambda x: len(x) > 2).agg({'B': pd.Series.nunique})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例17:使用describe进行聚合描述

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'C': 'describe'})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例18:结合pivot_table使用

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = pd.pivot_table(df, values='D', index=['A'], columns=['B'], aggfunc=pd.Series.nunique)
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例19:使用stack进行数据重塑后聚合

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.stack().nunique()
print(result)

Output:

Pandas中使用agg()函数进行去重计数

示例20:结合cumsum使用

import pandas as pd

data = {
    '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, 3, 4, 5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)

result = df.agg({'C': 'cumsum'})
print(result)

Output:

Pandas中使用agg()函数进行去重计数

3. 结论

通过上述示例可以看出,Pandas的agg()函数是一个非常强大的工具,可以灵活地应用于数据的聚合分析中,特别是在进行去重计数时。通过结合groupby()filter()pivot_table()等函数,可以实现更复杂的数据分析任务。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程