やりたいこと
Pandasのデータフレームで2つの列の値を比較して、それらの値のうち大きい(小さい)方の値を使って新しい列を作りたい。
たとえば、A列とB列という列があるデータフレームで、A列とB列を比較してその大きい方の値でC列という新しい列を作る場合はどうすればいいのか?
解決方法
numpyのwhereを使う。
numpyのwhereは、ExcelのIF関数のようにある条件を判定して、条件を満たす場合と条件を満たさない場合で処理を分けることができる。
使い方は以下の通り
df.loc[df.query(‘col_A==x’).index[0], ‘col_B’]
例
まずはデータフレームを用意する。
- pandasをimport
- データフレームを作成
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列という新しい列を追加する。
- numpyのimport
- 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 |
0 件のコメント :
コメントを投稿