我正在尝试在DataFrame中创建一个标记“信号”的新列。我似乎无法弄清楚如何在不设置变量和不执行以下操作的情况下在熊猫中实现此目的:
all_candles = pd.read_csv('ExportTest.csv', index_col=0)
all_candles.reset_index(level=0, inplace=True)
rows = len(all_candles.index)
for i in range(1,rows):
current_RSI = all_candles.loc[i]['RSI']
prev_RSI = all_candles.loc[i-1]['RSI']
if prev_RSI < 30 and current_RSI >= 30:
print('BULL SIGNAL')
elif prev_RSI >= 70 and current_RSI < 70:
print('BEAR SIGNAL')
它声明BULL SIGNAL或BEAR SIGNAL的地方,我希望它填写一个名为all_candles ['SIGNAL']的新列。我想要的理想解决方案是将它们全部包含在熊猫中,因此我不必进行for循环。
例如(原谅注意到这一点的粗略方法,我知道语法根本无效。)
if all_candles['RSI'].shift(-1) < 30 and all_candles['RSI'] >= 30:
all_candles['SIGNAL'] = 'BULL'
elif all_candles['RSI'].shift(-1) >= 70 and all_candles['RSI'] < 70:
all_candles['SIGNAL'] = 'BEAR'
else
all_candles['SIGNAL'] = 'NON'
对于可能的技术,任何帮助将不胜感激。
您可以使用函数和.apply()
import pandas as pd
def signal_cat(RSI_col) :
current_RSI=RSI_col['RSI']
prev_RSI=RSI_col['prev_RSI']
if prev_RSI < 30 and current_RSI >= 30:
return 'BULL SIGNAL'
elif prev_RSI >= 70 and current_RSI < 70:
return 'BEAR SIGNAL'
else:
return 'NON'
#définition of your dataframe
all_candles=pd.DataFrame({'RSI':[10,40,75,79,10,20,30]})
all_candles['prev_RSI'] =all_candles['RSI'].shift(1)
all_candles['SIGNAL']=all_candles[['prev_RSI', 'RSI']].apply(signal_cat, axis=1)
print(all_candles)
结果:
RSI prev_RSI SIGNAL
0 10 NaN NON
1 40 10.0 BULL SIGNAL
2 75 40.0 NON
3 79 75.0 NON
4 10 79.0 BEAR SIGNAL
5 20 10.0 NON
6 30 20.0 BULL SIGNAL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句