Pandasでグループごとに一意の値をカウントする [重複] 質問する

Pandasでグループごとに一意の値をカウントする [重複] 質問する

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()

でも私は

domain       count
vk.com        3
twitter.com   2
facebook.com  1
google.com    1

ベストアンサー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

またはジョン・クレメンツコメント:

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 を返すことです。

おすすめ記事