用每组 pandas 数来计算独特的值 [英] Count unique values with pandas per groups

查看:109
本文介绍了用每组 pandas 数来计算独特的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在每个域中计数唯一的 ID
我有数据

I need to count unique ID values in every domain I have data

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()
但是我想要获得

I try df.groupby(['domain', 'ID']).count() But I want to get

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 评论:

Or as Jon Clements commented:

df.groupby(df.domain.str.strip("'"))['ID'].nunique()

您可以像这样保留列名:

You can retain the column name like this:

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()'返回一个Series,'agg()'返回一个DataFrame。

The difference is that 'nunique()' returns a Series and 'agg()' returns a DataFrame.

这篇关于用每组 pandas 数来计算独特的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆