pythonの多重リストから最頻出ラベルを取り出す


例えば以下のような多重リストがあったとする

top_list = [[0.9951, 2],[0.8845, 3],[0.8745, 1],...]

top_list内の各要素は、第1要素が精度で第2要素がラベルの組のリスト、のようなイメージ.

ここで、top_list内の最頻出ラベルを取り出したい.こんな時、pandasのSeriesを使うとこのように書ける.

from pandas import Series
Series(map(lambda x: x[1], top_list)).value_counts().index[0]

まず内側のmap(lambda x: x[1], top_list)で、内側のリストの第2要素のみ取り出したリストを生成する. 上で言う```[2, 3, 1, ...] に相当する.仮にこれをtmp_listとする.

Series(tmp_list).value_counts()で、tmp_listの統計を取ってくれる.すなわち

  4    54
  2    34
  1    27
  3    21
  ...

のようになる.index[0]で最頻出のラベル(上で言う"4")が取り出せる.