【问题标题】:pandas/python: filter by condition within same column groupingpandas/python:在同一列分组中按条件过滤
【发布时间】:2021-08-31 22:04:44
【问题描述】:

我有一个包含多对相关项目的 df;例如:fxr_dl2_rank.r1 和 fxr_dl2_rank.r1_wp。是否可以过滤所有具有两个阳性结果的相关对?

data = {'item':['fxr_dl2_rank.r1','fxr_dl2_rank.r2','fxr_dl2_rank.r3',
                'fxr_dl2_rank.r4','fxr_dl2_rank.r5',
                'fxr_dl2_rank.r1_wp','fxr_dl2_rank.r2_wp','fxr_dl2_rank.r3_wp',
                'fxr_dl2_rank.r4_wp','fxr_dl2_rank.r5_wp',],
'result':[-0.15,0.13,-0.29,0.18,-0.18,0.00,0.16,0.15,0.17,-0.17]}
df = pd.DataFrame(data)
df

【问题讨论】:

    标签: python pandas filter


    【解决方案1】:

    首先返工'item'以获得公共部分,使用它对行进行分组,检查所有元素是否为正并使用输出进行切片:

    group = df['item'].str.replace('_wp$', '', regex=True)
    df[df.groupby(group)['result'].transform(lambda s: all(s.ge(0)))]
    

    输出:

                     item  result
    1     fxr_dl2_rank.r2    0.13
    3     fxr_dl2_rank.r4    0.18
    6  fxr_dl2_rank.r2_wp    0.16
    8  fxr_dl2_rank.r4_wp    0.17
    

    【讨论】:

      【解决方案2】:

      您可以使用以下内容:

      #create helper column
      df["helper"] = df["item"].str[:15]
      #filter out all negative values in result
      df = df[df["result"] >= 0]
      
      #keep only duplicated rows in helper column
      df[df.duplicated(subset="helper", keep=False)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-27
        • 2018-07-02
        • 2018-11-15
        • 1970-01-01
        • 2019-02-16
        • 2018-12-14
        • 2022-01-09
        • 2021-10-30
        相关资源
        最近更新 更多