初期条件 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 件のコメント:
コメントを投稿