【问题标题】:Compare values between different rows in Pandas比较 Pandas 中不同行之间的值
【发布时间】:2016-11-27 22:46:41
【问题描述】:

我是 pandas 的新手,我正在尝试比较行之间的值,但没有运气。
我想找出DOJI100 的行和下一个 之间的RSI 差异
在这种情况下,52.157595 - 45.430342
我该怎么办?
我玩过query(),但我不知道我在做什么......

                    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

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    尝试使用diffloc

    df.RSI.diff(-1).loc[df.DOJI.eq(100)]
    
    20161125  10:13:00    6.727253
    Name: RSI, dtype: float64
    

    解释
    希望diff 是不言自明的。但是,-1 将索引与当前行对齐,而不是下一行。这意味着如果我用 DOJI100 时的布尔系列来掩盖它,那么我就有答案了。

    【讨论】:

      【解决方案2】:

      我会在 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')
      

      【讨论】:

        【解决方案3】:

        你也可以像diff一样使用shift

        (df['RSI'] - df['RSI'].shift(-1))[df['DOJI'] == 100]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-26
          • 1970-01-01
          • 1970-01-01
          • 2023-01-30
          • 2019-03-21
          • 2021-11-17
          • 2022-01-16
          • 2011-05-02
          相关资源
          最近更新 更多