【问题标题】:Drop pandas rows if value is not between two other values on the same column如果值不在同一列上的两个其他值之间,则删除 pandas 行
【发布时间】:2021-03-04 22:26:42
【问题描述】:

我有以下数据框:

>>>      mes1       mes2      mes3     mes4     mes5
A1      0.45        0.21      0.53     0.33     0.11
A2      0.44        0.32      0.11     0.38     0.91
A3      0.78        0.31      0.53     0.32     0.14
A4      0.12        0.33      0.56     0.43     0.12
posUp   0.52        0.40      0.62     0.48     0.54
posDown 0.32        0.15      0.45     0.24     0.05

我想归档我的数据框,所以我只剩下 rows,它们的值在所有列的“posUp”和“posDown”值之间,所以结果应该是:

>>>      mes1       mes2      mes3     mes4     mes5
A1      0.45        0.21      0.53     0.33     0.11
posUp   0.52        0.40      0.62     0.48     0.54
posDown 0.32        0.15      0.45     0.24     0.05

我试图通过将数据框切成系列然后放置这样的条件来做到这一点:

for i in df:
    db=df[i]
    vmin=db.loc['posUp']
    vmax=db.loc['posDown']
    db=db[(db>vmin)&(db<vmax)]

然后我想删除在最后一个 db 过滤器中找不到的行,但它没有过滤任何内容,当我打印 db 时,我得到“Series([],Name: ...” 除此之外,我相信有比 for 循环更方便/有效的方法。

所以我的最终目标是只有在所有列中的行,它们的值在 posUp 和 posDown 之间。

【问题讨论】:

    标签: python pandas filter


    【解决方案1】:

    试试lege

    mask = (df.le(df.loc['posUp'])       # compare with `posUp` row-wise
            & df.ge(df.loc['posDown'])   # compare with `posDown` row-wise
           ).all(1)                      # check for all True along the rows
    df[mask]
    

    输出:

             mes1  mes2  mes3  mes4  mes5
    A1       0.45  0.21  0.53  0.33  0.11
    posUp    0.52  0.40  0.62  0.48  0.54
    posDown  0.32  0.15  0.45  0.24  0.05
    

    【讨论】:

      【解决方案2】:

      您可以在sub 之后尝试all。 PS : A3 不应该包括在内,因为 mes1 是 0.78

      out = df[(df.sub(df.loc['posUp']).le(0) & df.sub(df.loc['posDown']).ge(0)).all(1)]
      Out[107]: 
               mes1  mes2  mes3  mes4  mes5
      A1       0.45  0.21  0.53  0.33  0.11
      posUp    0.52  0.40  0.62  0.48  0.54
      posDown  0.32  0.15  0.45  0.24  0.05
      

      【讨论】:

        猜你喜欢
        • 2022-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        相关资源
        最近更新 更多