質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

3回答

1826閲覧

pandasでdf内の特定の値のみ変更したい

anpapa

総合スコア16

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2018/05/16 12:27

pandasを用いてデータを扱っており、特定の条件に含まれる要素に対してのみ変更を加えたいのですが、要素の抽出はできたのですが変更を加えた結果が望んだ結果になりません。
特定の要素にのみ変更を加えつつ、他の要素はそのままにするにはどうすればよろしいでしょうか。

やりたいこと

以下のようなデータフレームを

0 1 0 1 10 1 2 -20 2 3 30

以下のように変更

0 1 0 1 10 1 2 0 2 3 30

現状

python

1df=df[df[1] < 0] + (0,20)

結果

0 1 1 2 0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

DataFrame.mask() をお使いください
第1引数の条件に該当する要素を第2引数の値に置き換える(マスクする)為のメソッドとなります。
(第2引数が無い場合は NaN に置き換わります)

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html

Python

1import pandas as pd 2df = pd.DataFrame([[1,10],[2,-20],[3,30]]) 3 4# 条件に該当する要素を 0 にする 5df1 = df.mask(df < 0, 0) 6# 0 1 7#0 1 10 8#1 2 0 9#2 3 30 10 11# 条件に該当する要素に 20 を足す(lambaも渡せる) 12df2 = df.mask(df < 0, lambda d: d+20) 13# 0 1 14#0 1 10 15#1 2 0 16#2 3 30

投稿2018/05/16 23:20

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anpapa

2018/05/17 08:34

回答していただき、ありがとうございます! みなさん、それぞれ対策を出していただいたのですが、こちらの回答が一番汎用性が高そうなので、ベストアンサーにさせていただきました、ありがとうございました。
guest

0

1列の値が0未満なら(0列の値は変えずに)1列の値として0をセットする
という意図なら以下でできます。

Python

1import pandas as pd 2df = pd.DataFrame([[1,10],[2,-20],[3,30],[4,-40]]) 3print(df) 4df.ix[df[1] < 0,1] = 0 5print(df)

投稿2018/05/16 12:47

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これで良さそうです。

python

1>>> import pandas as pd 2>>> df = pd.DataFrame([[1,10],[2,-20],[3,30]]) 3>>> df 4 0 1 50 1 10 61 2 -20 72 3 30 8>>> df[df[1] < 0] += (0,20) 9>>> df 10 0 1 110 1 10 121 2 0 132 3 30

投稿2018/05/16 12:37

編集2018/05/16 12:40
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/05/16 12:41 編集

ごめんなさい、質問意図を誤解していたので書き直しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問