2017-05-14 36 views
1

目前我有下面的數據框。前兩列是我的...我想創建第三列('Value_2_Replaced)。Python:有條件地創建基於兩個其他列的新列(包括負值)

enter image description here

本質上講,如果_1是正數,那麼我想VALUE_2和一個較小的值比較_1被安置在第三列。

棘手的部分是當Value_2爲負數時。如果Value_2爲負值但大於Value_1,我希望Value_2_替換爲Value_1,但保留其負值。

下面是我嘗試過的代碼,但它沒有考慮負值Value_2的情況。任何幫助是極大的讚賞!

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

回答

1

你可能繁殖的Value_2符號與列Value_1Value_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

,請檢查您柱的側向承載力絕對值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筆記本上。

函數檢查有問題的兩列的絕對值並對它們進行比較。然後,當函數被調用時,它會創建一個新列,導致您在示例屏幕截圖中查找的輸出爲