[Python] PandasのDataFrameで2つの列の値を比較して新しい列を作る方法

title-picture

PythonのPandasの使い方メモ。

やりたいこと

Pandasのデータフレームで2つの列の値を比較して、それらの値のうち大きい(小さい)方の値を使って新しい列を作りたい。 

たとえば、A列とB列という列があるデータフレームで、A列とB列を比較してその大きい方の値でC列という新しい列を作る場合はどうすればいいのか?



解決方法

numpyのwhereを使う。 numpyのwhereは、ExcelのIF関数のようにある条件を判定して、条件を満たす場合と条件を満たさない場合で処理を分けることができる。

使い方は以下の通り


df.loc[df.query(‘col_A==x’).index[0], ‘col_B’]


まずはデータフレームを用意する。
  1. pandasをimport
  2. データフレームを作成

import pandas as pd

df = pd.DataFrame([[3, 7], [40, 10], [753, 246], [3001, 3000]], columns=['A', 'B'])


A B
0 3 7
1 40 10
2 753 246
3 3001 3000

このデータフレームにnumpyのwhereを使って、A列とB列を比較してその大きい方の値でC列という新しい列を追加する。
  1. numpyのimport
  2. np.whereを使ってA列とB列を比較。
    • A列の方が大きい時はA列の値をC列を、そうでない時はB列の値をC列を作成する。

iimport numpy as np

df['C'] = np.where(df['A']>df['B'], df['A'], df['B'])


このコードを実行すると以下のデータフレームを作成することができる。

 
A B C
0 3 7 7
1 40 10 40
2 753 246 753
3 3001 3000 3001




以上、PandasのDataFrameで2つの列の値を比較して新しい列を作る方法について。

Pandasは奥が深い。勉強あるのみ。


0 件のコメント :