python pandas:执行分组依据和提取唯一实体计数的最简单方法?

python pandas: Simplest way to perform group by and extract count of unique entities?

我的 df:

nr,name
1,sam
2,sam
1,mar
1,sam
2,tom
2,jack
1,mar

如何按 'nr' 分组并计算 'name' 列中的不同名称?在所有语言中这一定是一个非常简单的命令,例如 mysql(groupby 和 distinct 命令),但我在 pandas 中找不到它。有人可以帮忙吗?

你想要nunique:

In [4]:

df.groupby('nr')['name'].nunique()
Out[4]:
nr
1    2
2    3
Name: name, dtype: int64

所以这个 returns 该列的唯一值的数量 'nr'

使用nunique()

In [13]: df.groupby('nr')['name'].nunique()
Out[13]:
nr
1     2
2     3

或者,使用 pd.Series.nunique

In [14]: df.groupby('nr').agg({'name': pd.Series.nunique})
Out[14]:
    name
nr
1      2
2      3

此外,您可以在 agg()

中使用 nunique()
In [15]: df.groupby('nr').agg({'name': lambda x: x.nunique()})
Out[15]:
    name
nr
1      2
2      3

有趣的是,有时我注意到 len(x.unique()) 比上述方法快得多。

In [16]: df.groupby('nr').agg({'name': lambda x: len(x.unique())})
Out[16]:
    name
nr
1      2
2      3