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

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

大きなデータセットを扱う場合、特定のデータグループに関数を適用する必要がある場合があります。たとえば、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
comments powered by Disqus