Data Analysis

Pandas高效分组计数唯一值

Spread the love

Pandas是Python中一个强大的数据处理库。一个常见的任务是确定数据集中各个组内唯一值的个数。本文将探讨三种高效的Pandas方法来实现这一点:groupby().nunique()groupby().agg()groupby().unique()。每种方法都将通过清晰的示例进行演示。

目录

groupby().nunique()方法

groupby()操作之后使用nunique()方法,可以直接提供每个组唯一值的计数。这通常是最有效和最简洁的方法。

考虑这个示例DataFrame:


import pandas as pd

data = {'Group': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
        'Value': ['X', 'Y', 'X', 'Z', 'Z', 'X', 'Y', 'Z', 'X']}
df = pd.DataFrame(data)
print(df)

这将产生:


  Group Value
0     A     X
1     A     Y
2     A     X
3     B     Z
4     B     Z
5     C     X
6     C     Y
7     C     Z
8     C     X

要计算每个’Group’中唯一’Value’条目的数量,请使用:


unique_counts = df.groupby('Group')['Value'].nunique()
print(unique_counts)

输出:


Group
A    2
B    1
C    3
Name: Value, dtype: int64

这显示分组’A’有2个唯一值,’B’有1个,’C’有3个。

groupby().agg()方法

agg()方法提供了更大的灵活性,可以一次应用多个聚合函数。我们可以将它与nunique()一起使用来计算唯一值,如果需要,还可以使用其他函数。

使用相同的DataFrame:


aggregated_data = df.groupby('Group')['Value'].agg(['nunique', 'count'])
print(aggregated_data)

输出:


      nunique  count
Group                
A           2      3
B           1      2
C           3      4

这显示了每个组的唯一值数量(nunique)和值的总计数(count)。这对于更全面的分析非常有益。

groupby().unique()方法

unique()方法返回每个组的唯一值本身,而不是它们的计数。虽然它没有直接提供计数,但如果您需要查看实际的唯一值,它很有用。


unique_values = df.groupby('Group')['Value'].unique()
print(unique_values)

输出:


Group
A    [X, Y]
B       [Z]
C    [X, Y, Z]
Name: Value, dtype: object

要获得计数,需要一个额外的步骤:


unique_value_counts = unique_values.apply(len)
print(unique_value_counts)

这将产生与nunique()相同的结果:


Group
A    2
B    1
C    3
Name: Value, dtype: int64

但是,这不如直接使用nunique()高效。

结论:对于简单地计算每个组的唯一值,groupby().nunique()是最直接和最高效的方法。groupby().agg()为将nunique()与其他聚合结合提供了更大的灵活性,而groupby().unique()在您需要查看唯一值时很有用。选择最适合您分析需求的方法。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注