首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Pandas计算每个组的唯一值

使用Pandas计算每个组的唯一值
EN

Stack Overflow用户
提问于 2016-07-11 22:38:25
回答 3查看 769.7K关注 0票数 306

我需要计算每个domain中唯一的ID值。

我有数据:

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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-11 22:43:54

您需要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()返回一个Series,而agg()返回一个DataFrame。

票数 386
EN

Stack Overflow用户

发布于 2018-04-05 03:02:15

df.domain.value_counts()

>>> df.domain.value_counts()

vk.com          5

twitter.com     2

google.com      1

facebook.com    1

Name: domain, dtype: int64
票数 65
EN

Stack Overflow用户

发布于 2016-07-11 22:44:10

如果我理解正确的话,您需要为每个ID指定不同的domain数量。然后你可以试试这个:

output = df.drop_duplicates()
output.groupby('domain').size()

输出:

    domain
facebook.com    1
google.com      1
twitter.com     2
vk.com          3
dtype: int64

您也可以使用value_counts,它的效率稍低一些。但最好的是使用nuniqueJezrael's answer

%timeit df.drop_duplicates().groupby('domain').size()
1000 loops, best of 3: 939 µs per loop
%timeit df.drop_duplicates().domain.value_counts()
1000 loops, best of 3: 1.1 ms per loop
%timeit df.groupby('domain')['ID'].nunique()
1000 loops, best of 3: 440 µs per loop
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38309729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档