データフレームで条件に合致した行の複数項目の値を変更するには、どの様に記述すれば良いでしょうか。
A | B | C |
---|---|---|
a1 | b1 | c1 |
a2 | b2 | c2 |
a3 | b3 | c3 |
A列が"a2"のときB列を"b20",C列を"c200"に変更する場合は
python
1df['B'].mask((df['A'] == "a2"),"b20",inplace=True) 2df['C'].mask((df['A'] == "a2"),"c200",inplace=True)
と記述すれば良いのですが、羅列するのではなく簡潔に記述する方法はないでしょうか?
試したこと
python
1df['B','C'].mask((df['A'] == "a2"),("b20","c200"),inplace=True)
TypeError: 'DataFrame' object is not callable
惜しい、、 [] が足りません。
df[['B', 'C']] = df[['B', 'C']].mask((df['A'] == "a2"),("b20","c200"))
早速のご回答ありがとうございます。
出来ました。
df[['B'], ['C']].mask((df['A'] == "a2"),("b20","c200"),inplace=True)
のパターンは試したのですが、BとCを独立させる必要が無かったということですね。
すみません。
C列が数値だと
Wrong number of items passed 2, placement implies 1
というエラーになりました。
文字と数値は分けて実施する必要があるのでしょうか。
原因は判りませんが、mask ではなく loc を使ってみてはどうでしょうか。
df.loc[(df['A'] == "a2"), ['B', 'C']] = ("b20", "c200")
ただ、C 列の dtype が object(文字列)に変換されてしまいますけれども。
重ね重ねありがとうございます。
出来ました。
データ型によって記述方法が異なるのは、初心者にはわかり難いですね。
それから、解決済みにしたいので自己解決のところに、教えて頂いた内容を記載して
クローズして良いでしょうか。
はい、どうぞ。
回答1件
あなたの回答
tips
プレビュー