【问题标题】:updating the column basis checking the condition更新列基础检查条件
【发布时间】:2022-11-18 20:37:58
【问题描述】:
Id                   condition2       score
A                       pass            0
A                       fail            0
B                       pass            0
B                       level_1         0
B                       fail            0
C                       fail            0
D                       fail            0

预期数据框:

Id                   condition2       score
A                       pass            1
A                       fail            1
B                       pass            1
B                       level_1         1
B                       fail            1
C                       fail            0
D                       fail            0

如果条件 2 在任何行中具有 pass 或 level_1 ,则希望将 unique Id 的每一行的分数标记为 1 。

df['score'] = df.groupby('Id')['condition2'].transform(lambda x: x.eq('pass').any().astype(int))

上面的代码需要做哪些修改

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    让我们使用 isin 来查找具有 passlevel_1 的 ID:

    m = df['condition2'].isin(['pass', 'level_1'])
    df['score'] = df['Id'].isin(df.loc[m, 'Id']).astype(int)
    

    如果您仍然想使用 groupby 和 transform..here 是对现有方法的修复:

    m = df['condition2'].isin(['pass', 'level_1'])
    df['score'] = m.groupby(df['Id']).transform('any').astype(int)
    

      Id condition2  score
    0  A       pass      1
    1  A       fail      1
    2  B       pass      1
    3  B    level_1      1
    4  B       fail      1
    5  C       fail      0
    6  D       fail      0
    

    【讨论】:

      【解决方案2】:

      另一种可能的解决方案,List Comprehension

      df.assign(score=[1*any(df.loc[df.Id == i,
                'condition2'].isin(['pass', 'level_1'])) for i in df.Id])
      

      输出:

        Id condition2  score
      0  A       pass      1
      1  A       fail      1
      2  B       pass      1
      3  B    level_1      1
      4  B       fail      1
      5  C       fail      0
      6  D       fail      0
      

      【讨论】:

        猜你喜欢
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 2022-11-27
        相关资源
        最近更新 更多