2017-05-14 8 views
1

現在、以下のデータフレームがあります。最初の2つの列は私が持っているものです...そして、私は3番目の列( 'Value_2_Replaced')を作成したいと思います。本質的Python:条件付きで2つの他の列(負の値を含む)に基づいて新しい列を作成する

enter image description here

VALUE_1が正の数であれば、私は値2とVALUE_1を比較すると小さい値を有するものは、3番目の列に配置されます。

わかりにくい部分は、値2が負の場合です。 Value_2が負でValue_1より大きい場合、Value_2_ReplacedをValue_1と同じにしたいが、負の値は保持したい。

以下は私が試したコードですが、負のValue_2の状況を考慮していません。どんな助けでも大歓迎です!

df["Value_2_Replaced"] = df[["Value_1", "Value_2"]].min(axis=1) 

答えて

1

あなたが列Value_1Value_2の絶対分でValue_2の符号を掛けるかもしれない:

df["Value_2_Replaced"] = pd.np.sign(df.Value_2) * df[["Value_1", "Value_2"]].abs().min(1) 

df 
#Account Value_1 Value_2 Value_2_Replaced 
#0  A  100  200    100 
#1  B  200  400    200 
#2  C  300  -400   -300 
#3  D  700  -800   -700 
+1

作業したようです。あなたはそれのような列の印を呼び出すことができると気づかなかった...華麗な:)ありがとう – PineNuts0

0

チェックあなたのcolumsの絶対値abs()

import pandas as pd 

a = {"account":(1, 2), "col1":(100, 700), "col2":(200, -800)} 

df = pd.DataFrame.from_dict(a) 

def col2_replaced(df): 
    if (abs(df['col1'] < abs(df['col2']))) and df['col2'] < 0: 
     return -df['col1'] 
    elif (abs(df['col1'] < abs(df['col2']))) and df['col2'] > 0: 
     return df['col1'] 
    else: 
     return df['col2'] 

df['col2_replaced'] = df.apply(col2_replaced, axis=1) 

dataframe before running function

dataframe after running function

これは、jupyterノートブックにまとめた例です。

この関数は、問題の2つの列の絶対値をチェックし、それらを比較します。次に、関数が呼び出されると、新しい列が作成され、サンプルスクリーンショットで探していた出力が得られます。

関連する問題