比较 Pandas 中的当前行和上一行

Beh*_*dad 1 python dataframe pandas

我有一个股票数据框:

   Open     High      Low    Close  Volume        rb          us  \
0  1.20821  1.20821  1.20793  1.20794  138.96  0.022347  100.000000   
1  1.20794  1.20795  1.20787  1.20788  119.61  0.004967   85.714286   
2  1.20788  1.20793  1.20770  1.20779  210.42  0.007451   64.285714   
3  1.20779  1.20791  1.20779  1.20789   77.51  0.008280   83.333333   
4  1.20789  1.20795  1.20789  1.20792   56.97  0.002484   50.000000   

           ls  color  
0   96.428571  black  
1   85.714286  black  
2   50.000000  black  
3  100.000000  white  
4  100.000000  white  
Run Code Online (Sandbox Code Playgroud)

我想将当前行数据与前一行数据进行比较,如下所示:

if(df['color'] == df['color'].shift(-1)):
   if((df['Close'] >= df['Open'].shift(-1) and df['Open']>=df['Close'].shift(-1)):
      df['Position'] = UP
   if((df['Close'] < df['Open'].shift(-1) and df['Open']<=df['Close'].shift(-1)):
      df['Position'] = DOWN
Run Code Online (Sandbox Code Playgroud)

还有更多 IF 条件......

无法比较数据

np.where(condition,TRUE,FALSE)
Run Code Online (Sandbox Code Playgroud)

因为我的算法中有很多条件。这只是其中的一部分。

我如何进行这些条件检查?

har*_*pan 7

你需要:

df['Position'] = np.where((df['Volume'] > df['Volume'].shift(-1)) & ((df['Close'] >= df['Close'].shift(-1)) & (df['Open'] <= df['Open'])),"UP","DOWN")
Run Code Online (Sandbox Code Playgroud)

输出:

        Open    High    Low Close   Volume  Position
0   1.20821 1.20821 1.20793 1.20794 138.96  UP
1   1.20794 1.20795 1.20787 1.20788 119.61  DOWN
2   1.20788 1.20793 1.20770 1.20779 210.42  DOWN
3   1.20779 1.20791 1.20779 1.20789 77.51   DOWN
4   1.20789 1.20795 1.20789 1.20792 56.97   DOWN
Run Code Online (Sandbox Code Playgroud)