Python で 1 次元配列内のアイテムの出現をカウントする方法

Debolina Dasgupta 2023年1月30日
  1. Python で collections を使用して配列内の出現数を求める
  2. NumPy ライブラリを使用して Python の配列内の出現数を求める
Python で 1 次元配列内のアイテムの出現をカウントする方法

配列の操作中に、開発者が直面する可能性のある主要な問題の 1つは、アイテムの発生数を数えることです。e コマースサイトで 10 日間に販売された商品の数が多い場合、100 を超える商品が販売された日数を知りたいとします。

sales = [0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]

解決する最も簡単な方法は、配列内で 100 が発生する回数を数えることです。

Python で collections を使用して配列内の出現数を求める

collections は、データのコレクションを格納するコンテナのように機能します。collections モジュールを簡単にインポートして、Counter 関数を使用できます。

コード:

import collections

sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]  

print(collections.Counter(sales))

結果の出力は辞書です。配列内の各項目が発生した回数がリストされます。

ただし、sales 配列で 100 が発生した回数を出力する場合は、辞書からフェッチできます。

>>>print(collections.Counter(sales)[100])
4

Collection モジュールは 10 進数と文字列でも動作します。

floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0, 
10.0, .8, .8, .7, .7, .8]
print(collections.Counter(floatarr))
#Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})

stringarr=["george","mark","george","steve","george"]
print(collections.Counter(stringarr))
#Counter({'george': 3, 'mark': 1, 'steve': 1})

NumPy ライブラリを使用して Python の配列内の出現数を求める

ただし、Python で定義されたライブラリである NumPy を使用して、大きな配列を処理し、多数の数学関数を含めることもできます。

NumPy で定義された関数を使用して、配列のアイテム数を返す方法はいくつかあります。

NumPy で unique 関数を使用する

Count とともに unique 関数は、各アイテムの数の辞書を返します。また、10 進数と文字列でも機能します。

import collections, numpy

aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100, 
100, 80, 70, 10, 30, 40])

unique, counts = numpy.unique(aUnique, return_counts=True)

print(dict(zip(unique, counts)))

NumPy で count_nonzero 関数を使用する

count_nonzero を使用すると、検索しているアイテムの数が返されます。読みやすいインターフェイスと少ないコード行を提供します。

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10, 
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1

count_nonzero は 10 進数と文字列でも機能します。

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,

100, 100, 80, 70, 10, 30, 40])

>>>print(numpy.count_nonzero(aCountZero == 100.1))
1

NumPy で bincount 関数を使用する-整数の配列のみ

ただし、整数のみの配列がある場合は、NumPy の bincount 関数を使用できます。最良の部分は、結果を配列として返すことです。

>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])

>>>print(numpy.bincount(abit))

[5 3 0 0 0 0 1 0 0 1 2]

配列内の数値の場合、結果には項目数が昇順で表示されます。たとえば、配列 abit の 0 は 5 回発生し、10 は配列の最初と最後の項目で示されるように 2 回発生します。

関連記事 - Python Array