我正在使用以下数据框,名为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"])
谢谢,
答案 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)