2016-11-27 2 views
2

Я новичок в pandas и пытаюсь сравнить значения между строками без везения.
Я хочу, чтобы найти разницу между строкой в ​​RSIгде DOJI является 100 и следующим один. В этом случае 52.157595 - 45.430342.
Что я должен сделать для этого?
Я играл немного с query(), но я понятия не имею, что я делаю ...
Сравнить значения между разными строками в Pandas

    Close RSI  MOM MACD  HAM HMAN DOJI 
20161125 10:13:00 69.87 52.157595 -0.21 0.011241 0  0 100 
20161125 10:14:00 69.77 45.430342 -0.24 0.003785 0  0  0 
20161125 10:15:00 69.77 45.430342 -0.10 -0.002099 0  0  0 
20161125 10:16:00 69.83 49.924669 -0.02 -0.001899 0  0  0 

ответ

3

diff попробуйте использовать с loc

df.RSI.diff(-1).loc[df.DOJI.eq(100)] 

20161125 10:13:00 6.727253 
Name: RSI, dtype: float64 

объяснение
Надеюсь, diff сам пояснил. Однако -1 выравнивает индекс с текущей строкой, а не следующей. Это означает, что если я замаскирую его булевыми рядами, когда DOJI - 100, то у меня есть мой ответ.

1

Я бы найти строки и делать манипуляции в numpy

this_row = np.append((df.DOJI.values == 100)[:-1], False) 
next_row = np.roll(this_row, 1) 

rsi = df.RSI.values 

pd.Series(rsi[this_row] - rsi[next_row], 
      df.index.values[this_row], name='RSI') 
0

вы также можете использовать shift подобным образом diff

(df['RSI'] - df['RSI'].shift(-1))[df['DOJI'] == 100] 
Смежные вопросы