pandas 更新列基础检查条件

hzbexzde  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(137)
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

预期的 Dataframe :

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

如果condition 2在任何一行中具有pass或level_1,则对于具有唯一Id的每行,将score标记为1。

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

要对上述代码进行哪些修改

bf1o4zei

bf1o4zei1#

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

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

如果您仍然希望使用groupby和transform..,以下是对现有方法的修正:
第一次

olhwl3o2

olhwl3o22#

另一种可能的解决方案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

相关问题