Pandas のグループごとに一意の値をカウントする

Ahmed Waheed 2023年1月30日
  1. df.groupby().nunique() メソッド
  2. df.groupby().agg() メソッド
  3. df.groupby().unique() メソッド
Pandas のグループごとに一意の値をカウントする

大きなデータセットを扱う場合、特定のデータグループに関数を適用する必要がある場合があります。たとえば、countries のデータセットと、それらが私的な事柄に使用するプライベートな code があります。国が使用するコードの数を数えたい。以下に、一意の値をカウントするさまざまな方法を示します。

  1. df.groupby().nunique() メソッド
  2. df.groupby().agg() メソッド
  3. df.groupby().unique() メソッド

次のセクションでは、次のように同じ 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

関連記事 - Pandas DataFrame