计算每组Pandas的唯一值

2024-03-29 06:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 数据comiddffacebookdomaincountgoogle
3条回答

df.domain.value_counts()

>>> df.domain.value_counts()

vk.com          5

twitter.com     2

google.com      1

facebook.com    1

Name: domain, dtype: int64

你需要^{}

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

如果需要^{}'字符:

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

通常,要计算单个列中的不同值,可以使用^{}

df.domain.value_counts()

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

要查看列中有多少唯一值,请使用^{}

df.domain.nunique()
# 4

要获得所有这些不同的值,可以使用^{}^{},这两个函数之间的细微差别是unique返回一个numpy.array,而drop_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

相关问题 更多 >