[解決済み] pandasの一意な値複数の列
2022-03-16 15:09:39
質問
df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
Col1'と'Col2'のユニークな値を返すには、どのような方法が良いでしょうか?
望ましい出力は
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
解決方法は?
pd.unique
は、入力された配列、またはDataFrameのカラムやインデックスから一意の値を返します。
この関数への入力は一次元である必要があるため、複数の列を組み合わせる必要があります。最も簡単な方法は、必要な列を選択し、その値をNumPyのフラット化された配列で表示することです。全体の操作はこのようになります。
>>> pd.unique(df[['Col1', 'Col2']].values.ravel('K'))
array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)
なお
ravel()
は配列メソッドで、多次元配列のビューを (可能であれば) 返します。引数
'K'
は、メモリに格納されている順番に配列を平坦化するようにメソッドに指示します(pandasは通常、基礎となる配列を
Fortran-連続した順序
列が行の前にある)。これは、このメソッドのデフォルトの 'C' 順序を使用するよりも大幅に高速化される可能性があります。
別の方法として、カラムを選択して
np.unique
:
>>> np.unique(df[['Col1', 'Col2']].values)
array(['Bill', 'Bob', 'Joe', 'Mary', 'Steve'], dtype=object)
を使用する必要はありません。
ravel()
このメソッドは多次元配列を処理するためです。それでも、これは
pd.unique
は一意な値を特定するためにハッシュテーブルではなく、ソートベースのアルゴリズムを使用しているためです。
この速度の差は、大きなDataFrameの場合(特にユニークな値が数個しかない場合)に顕著になります。
>>> df1 = pd.concat([df]*100000, ignore_index=True) # DataFrame with 500000 rows
>>> %timeit np.unique(df1[['Col1', 'Col2']].values)
1 loop, best of 3: 1.12 s per loop
>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel('K'))
10 loops, best of 3: 38.9 ms per loop
>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel()) # ravel using C order
10 loops, best of 3: 49.9 ms per loop
関連
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み】pandasでカラムの種類を変更する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python関数の高度な応用を解説
-
PythonはWordの読み書きの変更操作を実装している
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] pandas データフレームの選択された列の値のユニークな組み合わせとカウント
-
[解決済み] 連続配列と非連続配列の違いは何ですか?