这个问题在这里已经有了答案:





Pandas 'count(distinct)' equivalent

(10 个回答)


3年前关闭。




我需要计算每个 ID 中唯一的 domain 值。
我有数据:

ID, domain
123, 'vk.com'
123, 'vk.com'
123, 'twitter.com'
456, 'vk.com'
456, 'facebook.com'
456, 'vk.com'
456, 'google.com'
789, 'twitter.com'
789, 'vk.com'
我试试 df.groupby(['domain', 'ID']).count()但我想得到
domain, count
vk.com   3
twitter.com   2
facebook.com   1
google.com   1

最佳答案

你需要 nunique :

df = df.groupby('domain')['ID'].nunique()

print (df)
domain
'facebook.com'    1
'google.com'      1
'twitter.com'     2
'vk.com'          3
Name: ID, dtype: int64

如果需要 strip ' 个字符:
df = df.ID.groupby([df.domain.str.strip("'")]).nunique()
print (df)
domain
facebook.com    1
google.com      1
twitter.com     2
vk.com          3
Name: ID, dtype: int64

或者如 Jon Clements 评论的那样:
df.groupby(df.domain.str.strip("'"))['ID'].nunique()

您可以像这样保留列名:
df = df.groupby(by='domain', as_index=False).agg({'ID': pd.Series.nunique})
print(df)
    domain  ID
0       fb   1
1      ggl   1
2  twitter   2
3       vk   3

不同之处在于 nunique() 返回一个系列,而 agg() 返回一个数据帧。

关于python - 使用 Pandas 计算每个组的唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38309729/

10-12 16:43