Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでSeries(シリーズ)内の最頻出要素を出力するプログラムの作成方法

はじめに

データ分析において、Series(シリーズ)の中で最も頻繁に出現する要素(最頻値)を特定することはよくある処理です。本記事では、Pythonのpandasとfunctoolsモジュールを組み合わせて、Series内の最頻出要素を効率的に求める方法を解説します。

入力データの例

以下のようなSeriesが与えられたと仮定します。

0    1
1    2
2    3
3    2
4    3
5    3
6    3
7    4
8    4
9    2

期待される出力

この場合、最も繰り返し回数が多い要素は「3」です。値「3」は合計4回出現しており、他のどの値よりも多いことがわかります。

most repeated element is: 3

解決手順

この問題を解くためには、以下の手順に従います。

  • pandasのSeriesを定義する

  • functoolsモジュールのreduceメソッドを使用し、lambda関数の中で各要素の出現回数を一つずつ比較する

reduceメソッドの仕組み

reduceメソッドは、Seriesの各要素を順番に取り出しながら、lambda関数で指定した条件に基づいて比較を行います。具体的には、以下のコードのように、各要素の出現回数をlen()関数でカウントし、より多く出現している方の値を保持していきます。

ft.reduce(lambda x,y:x if(len(data[data==x])>len(data[data==y])) else y,data)

実装例

理解を深めるために、以下の実装例を見てみましょう。

import pandas as pd
import functools as ft
l = [1,2,3,2,3,3,3,4,4,2]
data = pd.Series(l)
print("most repeated element is:", ft.reduce(lambda x,y:x
if(len(data[data==x])>len(data[data==y])) else y,data))

実行結果

most repeated element is: 3

補足:value_counts()を使った別の方法

なお、pandasに標準で用意されているvalue_counts()メソッドを使えば、よりシンプルに最頻出要素を取得できます。

print(data.value_counts().idxmax())  # 3 が出力される

value_counts()は出現回数の降順で集計結果を返すため、先頭のインデックス(idxmax)を取得すれば最頻出要素が得られます。ただし、reduceを使う方法は比較ロジックを自由にカスタマイズできる点で柔軟性があります。

まとめ

この記事では、functools.reduceとlambda関数を組み合わせて、pandasのSeriesから最も頻繁に繰り返される要素を抽出する方法を紹介しました。データ分析や前処理の場面で役立つテクニックなので、ぜひ活用してみてください。

  1. 【Python】PandasのSeriesから特定の範囲の要素を抽出して表示する方法

    はじめにデータ分析では、PandasのSeriesから特定の範囲に含まれる値だけを取り出したい場面がよくあります。本記事では、「10以上15以下」の要素を抽出して表示するプログラムを、2つの異なるアプローチで実装する方法を解説します。入力 − 次のようなSeriesがあるとします。0 12 1 13 2 15 3 20 4 19 5 18 6 11出力 − 10から15の範囲にある要素を抽出すると、結果は次のようになります。0 12 1 13 2 15 6 11解決策1:between()メソッドを使うPandasには、指定した

  2. Pythonでひし形を描画・出力するプログラムの書き方

    Pythonのループ処理(繰り返し構文)を活用すると、キーボードのさまざまな文字を使って、整形された図形を簡単に作成できます。その一例が「ひし形(ダイヤモンド形)」です。ひし形の出力には複数のループが必要になります。なぜなら、文字を縦方向と横方向の両方に出力しなければならないからです。さらに、図形は上端から中央に向かって徐々に大きくなり、中央から下端に向かって徐々に小さくなるという特徴もあります。このため、内側にもう1つのforループを含む、2つのforループを使用します。前半のループで上側(頂点から中央まで)を描き、後半のループで下側(中央から底辺まで)を描く仕組みです。サンプルコードdef