我试图基于两个条件语句在dataframe中创建一个新列。如果满足这两种条件,则新列应模仿股票“返回”列。如果他们不满意,新列应该有0。请帮帮忙。
股票‘喜闻乐见’=np.where(股票‘收盘’<股票‘2天’和股票‘收盘’<股票‘5天’),[股票‘回报’,np.nan]
发布于 2022-02-17 20:14:28
我认为在创建基于其他列的新列时,不应该使用where。
分配方法更合适。
下面是文档中的一个快速示例:
>>> df.assign(temp_f=df['temp_c'] * 9 / 5 + 32)
>>> temp_c temp_f
>>> Portland 17.0 62.6
>>> Berkeley 25.0 77.0在你的例子中,你首先需要创建一个熊猫函数,它将贯穿每个细胞。因为您的代码每次都试图读取整个列,因此出现了错误。
因此,在您的例子中,这个片段应该可以做到:
strat1_return = stock.apply(
lambda x: x['return'] if x['close'] < x['2_dayma'] and x['close'] < x['5_dayma'] else np.nan)
)
stock = stock.assign(strat1_return=strat1_return.values)或者没有assign
stock['strat1_return'] = stock.apply(
lambda x: x['return'] if x['close'] < x['2_dayma'] and x['close'] < x['5_dayma'] else np.nan)
)使用apply或assign创建新列的区别可以在本回答中找到。
https://stackoverflow.com/questions/71164593
复制相似问题