使用 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

原文由 Arseniy Krupenin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 485
2 个回答

你需要 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() 返回一个数据帧。

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

通常要计算单列中的不同值,您可以使用 Series.value_counts

 df.domain.value_counts()

#'vk.com'          5
#'twitter.com'     2
#'facebook.com'    1
#'google.com'      1
#Name: domain, dtype: int64

要查看列中有多少个唯一值,请使用 Series.nunique

 df.domain.nunique()
# 4

To get all these distinct values, you can use unique or drop_duplicates , the slight difference between the two functions is that unique return a numpy.arraydrop_duplicates 返回 pandas.Series

 df.domain.unique()
# array(["'vk.com'", "'twitter.com'", "'facebook.com'", "'google.com'"], dtype=object)

df.domain.drop_duplicates()
#0          'vk.com'
#2     'twitter.com'
#4    'facebook.com'
#6      'google.com'
#Name: domain, dtype: object


至于这个特定的问题,因为你想计算另一个变量的不同值,除了 groupby 其他答案提供的方法,你也可以先删除重复项然后做 value_counts()

 import pandas as pd
df.drop_duplicates().domain.value_counts()

# 'vk.com'          3
# 'twitter.com'     2
# 'facebook.com'    1
# 'google.com'      1
# Name: domain, dtype: int64

原文由 Psidom 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题