pandas将数字列转换为1 / -1

问题描述 投票:0回答:1

我有一列名为RSI的值,我希望通过pandas实现以下效果:

1)如果RSI > 70的值,则表示该股票处于超买状态。因此,它可能会在不久的将来下降(表明意见'-1')

2)如果RSI < 30的值,则意味着股票超卖。因此,它可能在不久的将来上升(表示意见'+1')。

3)对于(30, 70)之间的值,如果时间't'处的RSI在时间't-1'处大于RSI,则趋势的意见表示为'+1',反之亦然。

我该怎么办。谢谢。

python pandas
1个回答
0
投票
import pandas as pd
import numpy as np 
import random
RSI = pd.Series(np.random.randn(50))
t = pd.Series(list(range(50)))
opinion = 0
for i in t:
    if i!=0:
        if RSI[i] > 70:
            opinion -=1
        elif RSI[i] < 30:
            opinion += 1
        elif RSI[i] > RSI[i-1]:
            opinion += 1
        elif RSI[i] < RSI[i-1]:
            opinion -= 1

print(opinion)

如果你想要一个计数器在时间t累积,无论是买入(+1)还是卖出(-1)。如果要创建该更改的图表,请将这些值存储在Series中。

import pandas as pd
import numpy as np 
import random
RSI = pd.Series(np.random.randn(50))
t = pd.Series(list(range(50)))
opcount = 0
opinion =[]
for i in t:
    if i!=0:
        if RSI[i] > 70:
            opcount -= 1
            opinion.append(opcount)
        elif RSI[i] < 30:
            opcount += 1
            opinion.append(opcount)
        elif RSI[i] > RSI[i-1]:
            opcount += 1
            opinion.append(opcount)
        elif RSI[i] < RSI[i-1]:
            opcount -= 1
            opinion.append(opcount)

opinion = pd.Series(opinion)

print(opinion)

如果你只想要一个+1,-1,0的数组,那么做同样但没有+ =或 - =。

import pandas as pd
import numpy as np 
import random
RSI = pd.Series(np.random.randn(50))
t = pd.Series(list(range(50)))
opinion =[]
for i in t:
    if i!=0:
        if RSI[i] > 70:
            opinion.append(-1)
        elif RSI[i] < 30:
            opinion.append(1)
        elif RSI[i] > RSI[i-1]:
            opinion.append(1)
        elif RSI[i] < RSI[i-1]:
            opinion.append(-1)
        else:
            opinion.append(0)
    else:
        opinion.append(0)

opinion = pd.Series(opinion)

print(opinion)

然后,您可以将其显示为随时间推移显示为买入或不买入。这假设您的RSI列是一段时间内股票的价值,如果每个RSI是不同的股票,那么只需对您的列中的每个数组执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.