基于if语句和其他列的新Dataframe列

时间:2017-09-18 19:34:56

标签: python lambda

我正在使用以下数据框,名为df_atr_check:

Symbol  Average Price   ATR Quantity
SBUX          56          2       100
AAPL         150          3      -200
GOOG         700          4       300

我正在尝试在数据框中创建一个名为" Mental Stop"的新列。

条件很直接: 如果数量> 0,那么Mental Stop值将是"平均价格" - " ATR"否则,它将是"平均价格" +" ATR"。

我试图在这里使用Lambda函数,但是,它并没有为我返回一个值。请让我知道我做错了什么。

df_atr_check["Mental Stop"] = lambda x: (df_atr_check["Average Price"] - df_atr_check["ATR Multiple"]) if df_atr_check["Quantity"] > 0 else (df_atr_check["Average Price"] + df_atr_check["ATR Multiple"])

谢谢,

2 个答案:

答案 0 :(得分:1)

如果条件不太复杂,列表理解对于这样的情况可能很有用。 Lamdas将达到同样的目的,但列表理解更容易阅读(在我看来)。

试试这个......

df_atr_check['Mental Stop'] = [x - y if z > 0 else x + y for x,y,z in zip(df_atr_check['Average Price'], df_atr_check['ATR Multiple'], df_atr_check['Quantity'])]

答案 1 :(得分:0)

我明白了。

傻傻的我。不管怎么说,多谢拉!

    df_atr_check["Mental Stop"] = df_atr_check.transform(lambda x: (x["Average Price"] - x["ATR Multiple"]) \
    if x["Quantity"] > 0 else (x["Average Price"] + x["ATR Multiple"]), axis=1)