首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用布尔逻辑对一个数据的多列进行合并和过滤

用布尔逻辑对一个数据的多列进行合并和过滤
EN

Stack Overflow用户
提问于 2018-10-04 07:27:20
回答 1查看 351关注 0票数 1

目标:将买入/卖出/中性/错误指标输出到单个to列,同时过滤掉"False“值。指示符基于下面的dataframe列,然后用布尔语句表示:

代码语言:javascript
复制
df['sma_10'] = pd.DataFrame(ta.SMA(df['close'], timeperiod=10), dtype=np.float, columns=['close'])      
df['buy'] = pd.DataFrame(df['close'] > df['sma_10'], columns=['buy'])   
df['buy'] = df['buy'].replace({True: 'BUY'})        
df['sell'] = pd.DataFrame(df['close'] < df['sma_10'], columns=['sell'])     
df['sell'] = df['sell'].replace({True: 'SELL'})         
df['neutral'] = pd.DataFrame(df['close'] == df['sma_10'], columns=['neutral'])       
df['neutral'] = df['neutral'].replace({True: 'NEUTRAL'})        
df['error'] = pd.DataFrame((df['buy'] == False) & (df['sell'] == False) & (df['neutral'] == False), columns=['Error'])      
df['error'] = df['error'].replace({True: 'ERROR'})

df电流输出

代码语言:javascript
复制
buy  sell  Neutral Error
False False False ERROR
BUY False False False
False SELL False False
False False NEUTRAL False

df的期望输出

代码语言:javascript
复制
Indicator
ERROR
BUY
SELL
NEUTRAL

尝试和方法:第一种方法:合并所有购买/出售/中性/错误列,并尝试删除"False“值。Dataframe在出错之前只迭代一次。

代码语言:javascript
复制
df['sma_10_indic']=[df['buy'].astype(str)+df['sell'].astype(str)+df['neutral'].astype(str)+df['error'].astype(str)].drop("False")

我尝试了一个if &elif的子例程,例如:这个方法在第一个索引之前也会出错

代码语言:javascript
复制
df['buy'] = pd.DataFrame(df['close'] > df['sma_10'])
df['sell'] = pd.DataFrame(df['close'] < df['sma_10'])
df['neutral'] = pd.DataFrame(df['close'] == df['sma_10'])
error = ((buy == False) and (sell == False) and (neutral == False))
if (df['buy'] == "True"):
   df['sma_10_indic'] = pd.DataFrame("BUY",columns=['indicator'])
elif (df['sell'] == "True"):
   df['sma_10_indic'] = pd.DataFrame("SELL",columns=['indicator'])
elif (df['neutral'] == "True"):
   df['sma_10_indic'] = pd.DataFrame("NEUTRAL",columns=['indicator'])
elif (error == True):
   df['sma_10_indic'] = pd.DataFrame("ERROR",columns=['indicator'])

我对前面的道路不太确定,我在这条没有明确道路的道路上已经用头撞墙了大约14个小时。我还尝试过创建另一个分离的dataframe,并通过concat合并它们,但由于布尔值的原因,没有运气。我对蟒蛇和熊猫/数据比较陌生,所以请耐心地对待我。提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-04 07:34:22

使用numpy.select

代码语言:javascript
复制
m1 = df['close'] > df['sma_10']
m2 = df['close'] < df['sma_10']
m3 = df['close'] == df['sma_10']

df['Indicator'] = np.select([m1, m2, m3], ['BUY','SELL','NEUTRAL'], 'ERROR')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52641263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档