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

我需要计算每个 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

最佳答案

您需要 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。

https://stackoverflow.com/questions/38309729/

相关文章:

python - 如何在 python jinja 模板中输出 loop.counter?

linux - objdump 如何发出 intel 语法

python - 如何在 Python 中创建嵌套字典?

python - 在 Python 中查找数字的所有因数的最有效方法是什么?

c - 如何检测当前进程是否正在由 GDB 运行

c - Linux共享内存: shmget() vs mmap()?

linux - 为什么 find 命令的 -exec 选项需要反斜杠和分号?

python - 使用 python 和 BeautifulSoup 从网页中检索链接

linux - 什么是抢占/什么是可抢占内核?到底有什么好处呢?

c - Linux 中的 getch() 和 getche() 等价于什么?