pandasとnumpyを使って重複している要素の総和を取得する

投稿日 2019年7月1日 >> 更新日 2023年3月2日

今回はpandasとnumpyを使って重複している要素の総和を取得していこうと思います。

重複している要素とは[1, 2, 2, 1, 3, 4, 5, 4]だったり['python', 'django', 'python', 'flask', 'django', 'flask']といったかたちで、それを一意に[1, 2, 3, 4, 5]まとめたりその一意同士の数の和[2, 2, 1, 2, 1]を求めたりします。

pandasとnumpyにはそれぞれ便利なメソッドを使って行えるので紹介していこうと思います。

実行環境&使用ライブラリ

実行環境
Windows Subsystem for Linux
Python 3.6.8
pip 9.0.1
使用ライブラリ ライセンス
pandas BSD
numpy OSI Approved (new BSD)

pandasのvalue_counts()を使う

ターゲットといたしましては文字列を使用していきたいと思います。

適当にリストとして変数に格納しておきます。


target = ['python', 'numpy', 'pandas', 'django', 'python', 'flask', 'pandas', 'django', 'python3']

因みにPythonのset()関数で重複を取得できます。

# 実行

set(target)
{'django', 'flask', 'numpy', 'pandas', 'python', 'python3'}

pandasで重複要素を取得するにはvalue_counts()を使います。そのためにデータフレームを作成します。


import pandas as pd

target_df = pd.DataFrame(target, columns=['Category'])

target_df
  Category
0   python
1    numpy
2   pandas
3   python
4    flask
5   pandas
6   django
7  python3

target_dfの列名(columns)であるCategoryを指定してvalue_counts()に渡します。


df_count = target_df['Category'].value_count()

df_count
python      2
pandas     2
python3    1
django      1
flask         1
numpy      1

import numpy as np

np.array(df_count)
array([2, 2, 1, 1, 1, 1])

matplotlibで描画するときなどに重宝されます。

numpyのnp.unique()を使う

pandasではデータフレームとして実装していきましたがnumpyではリストの変数をnp.unique()に渡すだけで同じような実装ができてしまいます。


target = ['python', 'numpy', 'pandas', 'django', 'python', 'flask', 'pandas', 'django', 'python3']

import numpy as np

x = np.unique(target)

x
array(['django', 'flask', 'numpy', 'pandas', 'python', 'python3'],
      dtype='<U7')

np.unique()の引数にreturn_counts=Trueとすることで一意同士の和を取得することができます。


y = np.unique(target, return_counts=True)

y
(array(['django', 'flask', 'numpy', 'pandas', 'python', 'python3'],
       dtype='<U7'), array([1, 1, 1, 2, 2, 1]))

# インデックスの二番目(1)を指定すると
y = np.unique(target, return_counts=True)[1]

y
array([1, 1, 1, 2, 2, 1])

このままx軸とy軸としてmatplotlibの描画ライブラリに渡してしまうこともできますね。

まだまだ便利機能が豊富なpandasとnumpyをどんどん紹介していきたいと思います。

それでは以上になります。

最後までご覧いただきありがとうございます。

一覧へ戻る