以下のようなpandasのデータフレームがあったとして、kan = 0.000の部分のみをkangosの数値入っているところで置換するにはどうしたらよろしいでしょうか?
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Series.mask をお使いください。
pandas.Series.mask — pandas 0.25.1 documentation
Series.mask(条件式, 置き換える値) で「条件式」が True の要素を「置き換える値」で置換できます。
今回の場合、列 kangoshokuin_jokinkansan
の値が0の要素を置き換えたいとのことなので、条件式を df["kangoshokuin_jokinkansan"] == 0
とすることで、この条件式が True になる要素、つまり、値が0の要素は列 kangoshokuin_jokinkasan_estimation
の値で置き換えられます。
python
1import pandas as pd 2 3df = pd.DataFrame( 4 { 5 "jigyosho_id": [0, 1, 21], 6 "kangoshokuin_jokinkansan": [1, 0.954538, 0], 7 "kangoshokuin_jokinkasan_estimation": [2.859272, 0.318179, 1.319], 8 } 9) 10print(df) 11# jigyosho_id kangoshokuin_jokinkansan kangoshokuin_jokinkasan_estimation 12# 0 0 1.000000 2.859272 13# 1 1 0.954538 0.318179 14# 2 21 0.000000 1.319000 15 16# 列 kangoshokuin_jokinkansan の値が0の要素は列 kangoshokuin_jokinkasan_estimation の値で置き換える。 17df["kangoshokuin_jokinkansan"].mask( 18 df["kangoshokuin_jokinkansan"] == 0, 19 df["kangoshokuin_jokinkasan_estimation"], 20 inplace=True, 21) 22print(df)
補足
ちなみに kangoshokuin_jokinkansan
の値がなんらかの演算結果として算出された値である場合、数値計算は丸め誤差が発生するので、理論上0になるはずでも通常は厳密に0にはなりません。
そのため、浮動小数点数同士の値の比較は numpy.isclose を使うほうが好ましいです。
numpy.isclose — NumPy v1.15 Manual
python
1import pandas as pd 2 3df = pd.DataFrame( 4 { 5 "jigyosho_id": [0, 1, 21], 6 "kangoshokuin_jokinkansan": [1, 0.954538, 0], 7 "kangoshokuin_jokinkasan_estimation": [2.859272, 0.318179, 1.319], 8 } 9) 10print(df) 11# jigyosho_id kangoshokuin_jokinkansan kangoshokuin_jokinkasan_estimation 12# 0 0 1.000000 2.859272 13# 1 1 0.954538 0.318179 14# 2 21 0.000000 1.319000 15 16# 列 kangoshokuin_jokinkansan の値が0の要素は列 kangoshokuin_jokinkasan_estimation の値で置き換える。 17df["kangoshokuin_jokinkansan"].mask( 18 np.isclose(df["kangoshokuin_jokinkansan"], 0), 19 df["kangoshokuin_jokinkasan_estimation"], 20 inplace=True, 21) 22print(df)
投稿2019/08/26 07:40
編集2019/08/26 08:13総合スコア21956
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。