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

时间:2018-03-02 07:49:50

标签: python pandas

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

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

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

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

我该怎么办?感谢。

1 个答案:

答案 0 :(得分: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)。 如果要创建该更改的图表,请将这些值存储在一个系列中。

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是不同的股票,那么只需对您的列中的每个数组执行此操作。