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

Pythonで一意な値をソートした数値インデックス配列を出力するプログラムの作成方法

データ分析では、重複を含む系列(リストやSeries)から一意な値を抽出し、それらに対応する数値インデックス配列を取得したい場面がよくあります。特に、一意な値をアルファベット順にソートした上でインデックスを振り直したい場合は、pandasのpd.factorize()関数が便利です。

たとえば、次のような出力を目指します。

Sorted distinct values - numeric array index
[2 3 0 3 2 1 4]
['apple' 'kiwi' 'mango' 'orange' 'pomegranate']

解決策

pd.factorize()は、配列内の一意な値を検出し、それぞれに整数コードを割り当てる関数です。sort=Trueを指定すると、一意な値がソートされ、対応するコードも再割り当てされます。手順は以下の通りです。

  • 重複を含む要素のリストに対してpd.factorize()関数を適用し、結果をindexunique_valueとして保存します。

index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'])
  • indexと要素を出力します。この段階では、一意な値は出現順にコードが割り当てられており、ソートされていません。

  • 続いて、pd.factorize()sort=Trueを指定して再度適用し、結果をsorted_indexunique_valueとして保存します。

sorted_index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'],sort=True)
  • 最後に、ソート済みの数値インデックスと一意な値を出力します。

以下のコードを実行すると、動作をより深く理解できます。

import pandas as pd

index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'])
print("Without sorting of distinct values-numeric array index")
print(index)
print(unique_value)
print("Sorted distinct values - numeric array index")
sorted_index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'],sort=True)
print(sorted_index)
print(unique_value)

出力

Without sorting of distinct values-numeric array index
[0 1 2 1 0 3 4]
['mango' 'orange' 'apple' 'kiwi' 'pomegranate']
Sorted distinct values - numeric array index
[2 3 0 3 2 1 4]
['apple' 'kiwi' 'mango' 'orange' 'pomegranate']

このように、sort=Trueを指定しない場合は値の出現順にコードが割り当てられますが、指定すると一意な値がアルファベット順に並べ替えられ、それに応じた数値インデックス配列が得られます。カテゴリデータのエンコーディングなどにも幅広く活用できるテクニックです。

  1. Pythonで数値内のすべての0を5に置き換えるプログラムを作成する方法

    整数 N が与えられたとき、その数値に含まれるすべての「0」を「5」に置き換えることが課題です。ただし、先頭にある「0」は有効な桁として扱われないため、置き換えの対象から除外されます。それでは、具体的な例を見てみましょう。 入力例1 N = 1007 出力 1557 解説: 与えられた数値には2つの「0」が含まれており、これらを「5」に置き換えると「1557」になります。 入力例2 N = 00105 出力 155 解説: 先頭の「0」は無視され、中央の「0」を「5」に置き換えることで「155」という出力が得られます。 この問題を解くためのアプローチ 数値内のすべての「0」を「5」に置き換える

  2. Pythonで整数配列の重複を除去し、個別の要素だけを出力する方法

    整数型の配列が与えられ、その中には重複した要素が含まれている場合があります。この記事では、重複を取り除いて個別(ユニーク)な値だけを出力するPythonプログラムを解説します。 実行例 入力:A = [1, 2, 3, 4, 2, 3, 5, 6] 出力:[1, 2, 3, 4, 5, 6] アルゴリズム このプログラムは次の手順で動作します。 配列の要素を入力として受け取ります。 各要素を先頭から順番に1つずつ取り出します。 取り出した要素が、それ以前にすでに出力されたものかどうかを確認します。 初期値0のフラグ変数を用意し、すでに表示済みなら1、未表示なら0のままにします。 フラ