1
DataFrame
で行を選択し、それらの行の列の値を置き換える方法については、多くの質問がありますが、ユースケースは1つありません。パンダの行選択に基づく複数列の置換
df.loc[df.cherry == 'bad', 'apple'] = df.banana * 2
またはこの2つの列の値を設定します:
df.loc[df.cherry == 'bad', ['apple', 'banana'] = np.nan
1が別に基づいて単一の列を変更したい場合など
DataFrame
from this question、
In [1]: df
Out[1]:
apple banana cherry
0 0 3 good
1 1 4 bad
2 2 5 good
を使用して、この作品には、
しかし、これは動作しません:
df.loc[df.cherry == 'bad', ['apple', 'banana'] = [df.banana, df.apple]
、明らかに右側が3×2であるので、左側が1×2、したがって、エラーメッセージ
ValueError: Must have equal len keys and value when setting with an ndarray
ありながら、だから私は問題が何であるかを理解しますが、解決策は何ですか?
感謝を! 2番目の解決策は私が探していたものです。だから、基本的に私の場合は、 'df.loc [df.cherry == 'bad'、['apple'、 'banana']] = df.loc [df.cherry == 'bad'、['banana '、' apple ']]。values'を使用します。興味深いことに、カラム名を反転しても、 'values'がなければ動作しません。とにかくもう1つの質問:特別なものが必要な場合(例えば 'df.banana * 2')、新しい列を' df'に追加しない方法がありますか?おそらく '適用'と? –
ありがとう、それはよく見えるので、基本的に私はdf.loc [...] = pd.concat([df.banana * 3、df.apple * 2]、axis = 1).values' 。どうやら、値は私が探していた魔法の弾丸でした、ありがとう! –