【Python】Pandasのagg()とnuniqueでユニーク数(重複なし件数)をカウントする方法
Pandasで重複を除いた件数(ユニーク数)を数えるには、nuniqueを使用します。本記事では、groupby()で列ごとにデータをグループ化しながら、NumPyのsum()を使って合計値も同時に算出する方法を、サンプルコード付きでわかりやすく解説します。
必要なライブラリのインポート
まず、pandasとnumpyをインポートします。
import pandas as pd
import numpy as np
サンプルDataFrameの作成
次に、重複した値を含む3列(Car/Place/Units)を持つDataFrameを作成します。
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Audi', 'BMW', 'Lexus', 'Lexus'],
"Place": ['Delhi', 'Bangalore', 'Delhi', 'Chandigarh', 'Chandigarh'],
"Units": [100, 150, 50, 110, 90]
}
)
このデータでは、BMWとLexusがそれぞれ2行ずつ存在しており、同じ車種・地域の組み合わせが重複しています。
agg()とnuniqueでユニーク数をカウントする
agg()メソッドによる集計では、辞書形式で「列名: 適用する関数」を指定できます。ここでは「Units」列にnp.sumで合計を、「Place」列にpd.Series.nuniqueでユニーク数を適用します。
dataFrame = dataFrame.groupby("Car").agg({"Units": np.sum, "Place": pd.Series.nunique})
完全なコード例
ここまでの手順をまとめたコードは以下の通りです。
import pandas as pd
import numpy as np
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Audi', 'BMW', 'Lexus', 'Lexus'],
"Place": ['Delhi', 'Bangalore', 'Delhi', 'Chandigarh', 'Chandigarh'],
"Units": [100, 150, 50, 110, 90]
}
)
print("DataFrame ...\n", dataFrame)
# 集計時にnuniqueでユニーク数をカウント
result = dataFrame.groupby("Car").agg({"Units": np.sum, "Place": pd.Series.nunique})
print("\nUpdated DataFrame ...\n", result)
実行結果
上記のコードを実行すると、次のような出力が得られます。
DataFrame ...
Car Place Units
0 BMW Delhi 100
1 Audi Bangalore 150
2 BMW Delhi 50
3 Lexus Chandigarh 110
4 Lexus Chandigarh 90
Updated DataFrame ...
Units Place
Car
Audi 150 1
BMW 150 1
Lexus 200 1
結果を見ると、車種ごとに「Units」の合計が計算され(例:Lexusは110+90=200)、一方「Place」には重複を除いた地域の件数が表示されていることがわかります。これにより、1つの集計処理で「合計」と「ユニーク数」という異なる種類の統計を同時に取得できます。
補足:バージョンに関する注意点
agg()内でnp.sumを指定する書き方は従来から広く使われていますが、近年のPandasでは「"sum"」という文字列指定やpd.Series.sumの利用が推奨される場合があります。また、古いサンプルコードに見られるprint文(Python 2構文)は、Python 3ではprint()関数として記述する必要がある点にも注意してください。
-
PythonのMatplotlibでPandas DataFrameのヒストグラムを描画する方法
ヒストグラムとは、データの分布を視覚的に表現したグラフです。PandasのDataFrameからヒストグラムを作成するには、Matplotlibのhist()メソッドを使用します。この記事では、具体的なコード例とともに、その手順をわかりやすく解説します。必要なライブラリのインポートまず、PandasとMatplotlibの2つのライブラリをインポートします。import pandas as pd import matplotlib.pyplot as pltDataFrameの作成次に、「Car(車名)」と「Reg_Price(登録価格)」の2つの列を持つDataFrameを作成します。dat
-
Python Pandas入門:DataFrame内のNaN(欠損値)を0に置き換える方法
PandasのDataFrameに含まれるNaN(欠損値)を0に置き換えるには、fillna()メソッドを使用します。このメソッドは、データクレンジングや前処理の際に非常によく使われる基本的なテクニックです。例として、以下のようなCSVファイル(Microsoft Excelで開いた状態)があるとします。このデータには一部NaN値が含まれています。手順1:必要なライブラリをインポートするまず、Pandasライブラリをインポートします。import pandas as pd手順2:CSVファイルからDataFrameを読み込む次に、read_csv()メソッドを使ってCSVファイルのデータをDa