PandasはPythonの強力なデータ操作ライブラリです。データセット内の様々なグループにおける一意の値の数を決定することはよくある作業です。この記事では、このタスクを達成するための3つの効率的なPandasメソッド、groupby().nunique()
、groupby().agg()
、groupby().unique()
について解説します。各メソッドは明確な例とともに説明します。
目次
groupby().nunique()
メソッド
groupby()
操作の後で使用されるnunique()
メソッドは、各グループの一意の値の数を直接提供します。これは多くの場合、最も効率的で簡潔なアプローチです。
このサンプルDataFrameを考えてみましょう。
import pandas as pd
data = {'Group': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
'Value': ['X', 'Y', 'X', 'Z', 'Z', 'X', 'Y', 'Z', 'X']}
df = pd.DataFrame(data)
print(df)
これは以下を出力します。
Group Value
0 A X
1 A Y
2 A X
3 B Z
4 B Z
5 C X
6 C Y
7 C Z
8 C X
グループごとの一意の’Value’エントリをカウントするには、以下を使用します。
unique_counts = df.groupby('Group')['Value'].nunique()
print(unique_counts)
出力:
Group
A 2
B 1
C 3
Name: Value, dtype: int64
これは、グループ’A’が2つの、’B’が1つの、’C’が3つの、一意の値を持つことを示しています。
groupby().agg()
メソッド
agg()
メソッドはより柔軟性を提供し、一度に複数の集計関数を適用することを可能にします。必要に応じて他の関数とともに、一意の値をカウントするためにnunique()
で使用できます。
同じDataFrameを使用します。
aggregated_data = df.groupby('Group')['Value'].agg(['nunique', 'count'])
print(aggregated_data)
出力:
nunique count
Group
A 2 3
B 1 2
C 3 4
これは、各グループの一意の値の数(nunique
)と値の合計数(count
)の両方を示しています。これは、より包括的な分析に役立ちます。
groupby().unique()
メソッド
unique()
メソッドは、その数ではなく、各グループの一意の値自体を返します。直接カウントを提供しませんが、実際の一意の値を確認する必要がある場合に役立ちます。
unique_values = df.groupby('Group')['Value'].unique()
print(unique_values)
出力:
Group
A [X, Y]
B [Z]
C [X, Y, Z]
Name: Value, dtype: object
カウントを取得するには、追加のステップが必要です。
unique_value_counts = unique_values.apply(len)
print(unique_value_counts)
これはnunique()
と同じ結果になります。
Group
A 2
B 1
C 3
Name: Value, dtype: int64
しかし、これはnunique()
を直接使用する場合よりも効率が低いです。
結論:グループごとの一意の値を単純にカウントするには、groupby().nunique()
が最も直接的で効率的なメソッドです。groupby().agg()
はnunique()
を他の集計と組み合わせるための柔軟性を提供し、groupby().unique()
は一意の値を確認する必要がある場合に役立ちます。分析ニーズに最適なメソッドを選択してください。