Pandas のグループごとに一意の値をカウントする
Ahmed Waheed
2023年1月30日
2020年6月13日
Pandas
Pandas DataFrame

大きなデータセットを扱う場合、特定のデータグループに関数を適用する必要がある場合があります。たとえば、countries
のデータセットと、それらが私的な事柄に使用するプライベートな code
があります。国が使用するコードの数を数えたい。以下に、一意の値をカウントするさまざまな方法を示します。
次のセクションでは、次のように同じ DataFrame
を使用します。
import pandas as pd
data = [
[999,
'Switzerland'],
[113,
'Switzerland'],
[112,
'Japan'],
[112,
'Switzerland'],
[113,
'Canada'],
[114,
'Japan'],
[100,
'Germany'],
[114,
'Japan'],
[115,
'Germany']
]
df = pd.DataFrame(data, columns=["code","Countries"])
print(df)
出力:
code Countries
0 999 Switzerland
1 113 Switzerland
2 112 Japan
3 112 Switzerland
4 113 Canada
5 114 Japan
6 100 Germany
7 114 Japan
8 115 Germany
df.groupby().nunique()
メソッド
df.groupby().nunique()
関数がどのように私たちの国を groupby
するか見てみましょう。
import pandas as pd
data = [
[999,
'Switzerland'],
[113,
'Switzerland'],
[112,
'Japan'],
[112,
'Switzerland'],
[113,
'Canada'],
[114,
'Japan'],
[100,
'Germany'],
[114,
'Japan'],
[115,
'Germany']
]
df = pd.DataFrame(data, columns=["code","Countries"])
result = df.groupby('Countries')['code'].nunique()
print(result)
以下が出力されます。
Countries
Canada 1
Germany 2
Japan 2
Switzerland 3
Name: code, dtype: int64
これは、カナダが 1つのコードを使用していること、ドイツが 2つのコードを使用していることなどを示しています。
df.groupby().agg()
メソッド
このメソッドは、df.groupby().nunique()
と同じように機能します。nunique()
関数を agg()
関数に渡す必要があります。
import pandas as pd
data = [
[999,
'Switzerland'],
[113,
'Switzerland'],
[112,
'Japan'],
[112,
'Switzerland'],
[113,
'Canada'],
[114,
'Japan'],
[100,
'Germany'],
[114,
'Japan'],
[115,
'Germany']
]
df = pd.DataFrame(data, columns=["code","Countries"])
result = df.groupby(by='Countries', as_index=False).agg({'code': pd.Series.nunique})
print(result)
出力:
Countries code
0 Canada 1
1 Germany 2
2 Japan 2
3 Switzerland 3
.agg({'code': pd.Series.nunique})
関数 pd.Series.nunique
を使用して、列 code
で集計します。
df.groupby().unique()
メソッド
この方法は、どの国がどのコードを使用しているかを確認する場合に役立ちます。
import pandas as pd
data = [
[999,
'Switzerland'],
[113,
'Switzerland'],
[112,
'Japan'],
[112,
'Switzerland'],
[113,
'Canada'],
[114,
'Japan'],
[100,
'Germany'],
[114,
'Japan'],
[115,
'Germany']
]
result = df.groupby('Countries')["code"].unique()
print(result)
以下が出力されます。
Countries
Canada [113]
Germany [100, 115]
Japan [112, 114]
Switzerland [999, 113, 112]
Name: code, dtype: object