我需要计算ID每个domain.
ID
domain
我有数据:
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()
df.groupby(['domain', 'ID']).count()
但我想得到
domain, count vk.com 3 twitter.com 2 facebook.com 1 google.com 1
你需要nunique:
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 '
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。
nunique()
agg()