[解決済み] if-elif-elseの条件に基づいて新しいカラムを作成する。
2022-06-13 10:03:55
質問
データフレーム
df
:
A B
a 2 2
b 3 1
c 1 3
以下の条件で新しいカラムを作りたい。
もし行
A == B: 0
もし行が
A > B: 1
もし行が
A < B: -1
ということで、上の表から考えると、そうなるはずです。
A B C
a 2 2 0
b 3 1 1
c 1 3 -1
典型的な
if else
の場合、私は
np.where(df.A > df.B, 1, -1)
を行う場合、pandasは私の問題を1つのステップで解決するための特別な構文を提供しますか(3つの新しい列を作成し、結果を結合する必要なし)?
どのように解決するのですか?
上に述べたアプローチのいくつかを形式化すること。
データフレームの行を操作する関数を以下のように作成します。
def f(row):
if row['A'] == row['B']:
val = 0
elif row['A'] > row['B']:
val = 1
else:
val = -1
return val
これをデータフレームに適用します。
axis=1
オプションを渡して適用します。
In [1]: df['C'] = df.apply(f, axis=1)
In [2]: df
Out[2]:
A B C
a 2 2 0
b 3 1 1
c 1 3 -1
もちろん、これはベクトル化されていないので、多数のレコードにスケールしたときのパフォーマンスはあまり良くないかもしれません。 それでも、ずっと読みやすいと思います。特にSASのバックグラウンドから来る人は。
Edit
以下はベクター化したものです。
df['C'] = np.where(
df['A'] == df['B'], 0, np.where(
df['A'] > df['B'], 1, -1))
関連
-
Pythonの非常に便利な2つのデコレーターを解説
-
Python カメの描画コマンドとその例
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] PandasでDataFrameの行を列の値に基づいて削除する
-
[解決済み] pandas が他の列の値に基づいて新しい列を作成する / 複数の列の関数を行単位で適用する
-
[解決済み】pandas 三元結合で複数のデータフレームをカラムで結合する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
Python百行で韓服サークルの画像クロールを実現する
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python 入出力と高次代入の基礎知識
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み】Pandasでシリーズ/データフレームのカラムを条件付きで作成する。