2018年7月11日水曜日

Python pd.DataFrame.whereの使い方メモ

データフレームの置き換えで使われるwhereですが、少し複雑なのでメモ


初期条件 df1, df2を作ります。
pd.DataFrame.where()
df1 = pd.DataFrame([[1,-1,-2], [15,25,-5]])
0 1 2
0 1 -1 -2
1 15 25 -5

df2 = pd.DataFrame([[10,20,30],[40,50,60]])
0 1 2
0 10 20 30
1 40 50 60

df1の中で、0以上のものを残す(マイナスを消す)ようにするには、
df1.where(df1>=0)

とします。
これは、引数の条件(df1>=0) のものだけを『残す』という書き方で、注意が必要です。
0 1 2
0 1 NaN NaN
1 15 25.0 NaN

0以上のものを残し、それに当てはまらない場合(NaNになる部分)には、df2の行列の要素を入れたいときは
df1.where(df1>=0, df2)
0 1 2
0 1 20 30
1 15 25 60

としてdf2をwhereに渡すことで置き換えることができます。
ちなみにdf1, df2の行列の行・列が揃っていないとできません。


インデックスが違うとき

行名が3,4になっているdf3を作ります。
df3 = pd.DataFrame([[10,20,30], [40,50,60]], index=[3,4])
0 1 2
3 10 20 30
4 40 50 60

このときは、

df1.where(df1>=0, df3)

とやってもdf1>=0 だけしか反映されません。

df1.where(df1>=0, df3, axis=1)

とaxis=1とすれば読んでくれます。行名ではなくて、行を順番に使うということになります。

0 件のコメント:

コメントを投稿