【问题标题】:Syntax to select previous row in pandas after filtering过滤后在熊猫中选择前一行的语法
【发布时间】:2018-12-04 15:41:23
【问题描述】:

我有一个 pd.DataFrame df 有 5 行,比如说:

Row    Value
 1      32
 2      25
 3      10
 4      18
 5      21

假设我使用过滤器df[df['Value'] < 15],这应该返回

Row    Value
 3      10

我的问题是,我想在此过滤器返回 True 之前访问该行的值,在此示例中,我希望函数返回值 25(来自第 2 行)。

我的最终目标是应用条件,获取上面的行,然后测试该行是否有其他条件。

我可以使用哪些 pandas 函数?

谢谢!

【问题讨论】:

    标签: python pandas dataframe conditional-statements


    【解决方案1】:

    将蒙版上移 1。

    df[(df['Value'] < 15).shift(-1).fillna(False)]
    
       Row  Value
    1    2     25
    

    更一般地说,如果您要查找所有大于 15 的行,其下一行小于 15,您可以计算两个单独的掩码并将它们与:

    df[(df['Value'].shift(-1) < 15) & (df['Value'] > 15)]
    
       Row  Value
    1    2     25
    

    【讨论】:

    • 谢谢!如果我想更进一步并检查该值是否高于 15,该怎么办?
    • @AdrianY df[(df['Value'] &gt; 15).shift(-1).fillna(False)]?
    • 对不起,我应该更清楚。我的意思是检查第 2 行中的值是否高于 15。df[(df['Value'] > 15).shift(-1).fillna(False)]['Value'] >15 是否有效?
    【解决方案2】:

    np.flatnonzero

    找到掩码在哪里True 然后减一

    df.iloc[np.flatnonzero(df.Value < 15) - 1]
    
       Row  Value
    1    2     25
    

    【讨论】:

      【解决方案3】:

      使用idxmax

      >>> df.iloc[df.Value.le(15).idxmax() - 1]
      
      Row       2
      Value    25
      

      【讨论】:

        【解决方案4】:

        使用nonzero

        df.iloc[(df['Value'] < 15).nonzero()[0]-1]
        Out[34]: 
           Row  Value
        1    2     25
        

        【讨论】:

        • 我不知道.nonzero
        • 我只有袋子可以放进去。
        • @piRSquared 我的包不够大,放不下你展示给我的所有美丽 :-)
        • 你太客气了。你学到了很多技巧,也向我展示了一些技巧(-:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        相关资源
        最近更新 更多