1. ホーム
  2. パイソン

[解決済み】Pandasでグループごとにユニークな値をカウントする【重複あり

2022-03-27 02:15:01

質問

一意のカウントが必要です 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

解決方法は?

必要なのは 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() はシリーズを返し agg() はDataFrameを返す。