2017-05-14 5 views
1

Actuellement, j'ai le cadre de données ci-dessous. Les deux premières colonnes sont ce que j'ai ... et je veux créer la troisième colonne ('Value_2_Replaced).Python: création conditionnelle d'une nouvelle colonne basée sur deux autres colonnes (y compris les valeurs négatives)

enter image description here

Essentiellement, si Valeur_1 est un nombre positif, alors je veux comparer Valeur_1 avec valeur_2 et celui avec une valeur plus petite obtient placé dans la troisième colonne.

La partie délicate est lorsque Value_2 est négatif. Si Value_2 est négatif mais supérieur à Value_1, je veux que Value_2_Replaced soit égal à Value_1 mais conserve sa valeur négative.

Voici le code que j'ai essayé mais qui ne tient pas compte de la situation négative de Value_2. Toute aide est grandement appréciée!

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

Répondre

1

Vous pouvez multiplier le signe de Value_2 avec le min absolu des colonnes Value_1 et 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

Apparaît avoir travaillé! Je n'avais pas réalisé que vous pouviez appeler le signe d'une colonne comme ça ... génial :) Merci beaucoup – PineNuts0

0

Vérifiez la valeur absolue de vos 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

Ceci est un exemple que j'ai mis ensemble dans le cahier jupyter.

La fonction vérifie la valeur absolue des deux colonnes en question et les compare. Ensuite, lorsque la fonction est appelée, elle crée une nouvelle colonne résultant de la sortie que vous recherchiez dans votre exemple de capture d'écran