pandasとnumpyを使って重複している要素の総和を取得する
今回は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) |
ターゲットといたしましては文字列を使用していきたいと思います。
適当にリストとして変数に格納しておきます。
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で描画するときなどに重宝されます。
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をどんどん紹介していきたいと思います。
それでは以上になります。
最後までご覧いただきありがとうございます。