三行代码  ›  专栏  ›  技术社区  ›  T_Ner

如何筛选最后一行中的任何组是负数还是正数,只需显示该组即可。熊猫

  •  0
  • T_Ner  · 技术社区  · 1 月前

    我想筛选每组的最后一行。例如,您可以看到最后一行中的ID 101,qty是20,ID 105是-3,ID 106是-12。我想过滤最后一行中的任何组是负数还是正数,只需显示该组即可。

    下面是一个示例数据帧。

    import pandas as pd
    d = {'id': ['101', '101', '101', '105', '105', '106', '106'], 
        'qty': [10, -2, 20, 50, -3, 50, -12],
    }
    df31 = pd.DataFrame(data=d)
    df31
    
    id  qty
    0   101 10
    1   101 -2
    2   101 20
    3   105 50
    4   105 -3
    5   106 50
    6   106 -12
    

    如果每组的最后一行数量小于0,则如下所示

    enter image description here

    如果每组的最后一行数量大于0,则如下所示

    enter image description here

    如何获得这样的结果?

    1 回复  |  直到 1 月前
        1
  •  2
  •   Corralien    1 月前

    使用布尔掩码:

    m = df31.groupby('id')['qty'].transform('last') >= 0
    

    输出:

    # Positive
    >>> df31[m]
        id  qty
    0  101   10
    1  101   -2
    2  101   20
    
    # Negative
    >>> df31[~m]
        id  qty
    3  105   50
    4  105   -3
    5  106   50
    6  106  -12