【问题标题】:Most pythonic way to search for values in one column whom value in an other is above a treshold在一个列中搜索另一列中的值高于阈值的值的大多数 Pythonic 方法
【发布时间】:2021-12-24 08:10:18
【问题描述】:

我有一个 pandas DataFrame df 如下:

siren ratio
1      20
2      25
1      40
3      16
3      19
4      35

我的目标是拥有一个df2,其中只有一个比率值至少一次高于 30 的警报器,如下所示:

siren ratio
1      20
1      40
4      35

今天,我分两步做:

首先,我使用过滤器来获取所有值大于 30 的唯一警报:

value_30 = df[df["ratio"] > 30]["siren"].unique()

然后,我使用 value_30 作为列表来过滤我的 df,并获取我的 df2。

但是,我对这个解决方案并不满意,我认为有一种最 Pythonic 的方法可以做到这一点。有什么想法吗?

【问题讨论】:

    标签: python pandas dataframe filter


    【解决方案1】:

    使用groupby.filter

    res = df.groupby(df.siren).filter(lambda x: x["ratio"].max() > 30)
    print(res)
    

    输出

       siren  ratio
    0      1     20
    2      1     40
    5      4     35
    

    【讨论】:

      【解决方案2】:

      试试groupbytransform

      value_30 = df[df.groupby("siren")["ratio"].transform("max")>30]
      
      >>> value_30
         siren  ratio
      0      1     20
      2      1     40
      5      4     35
      

      【讨论】:

        【解决方案3】:
        df[df['ratio'].gt(30).groupby(df['siren']).transform('max')]
        
            siren  ratio
        0      1     20
        2      1     40
        5      4     35
        ​
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          • 2019-04-26
          • 2018-03-14
          • 2021-10-29
          • 1970-01-01
          • 2011-11-09
          相关资源
          最近更新 更多