基于行值创建Pandas新列

3

我有一个数据框:

    Item    SW_test HW_test QA_test
0   PC      Pass    Pass    Pass
1   Laptop  Fail    Fail    Pass
2   Mouse   Pass    Pass    Fail

我想创建最终一列,如果所有测试都通过(不区分大小写),则会给出Pass,如果有一个或多个未通过,则会给出Fail
    Item    SW_test HW_test QA_test Final
0   PC      Pass    Pass    Pass    Pass
1   Laptop  Fail    Fail    Pass    Fail
2   Mouse   Pass    Pass    Fail    Fail

我如何在pandas中创建df['Final']

4个回答

6

使用eqall一起:

df['Final'] = df.iloc[:,1:].eq('Pass').all(1)
#If case sensitive you can use
df['Final'] = df.iloc[:,1:].isin(['Pass','pass']).all(1)
#or
df['Final'] = df.iloc[:,1:].apply(lambda x: x.str.lower().eq('pass')).all(1)
#or
df['Final'] = df.iloc[:,1:].applymap(str.lower).eq('pass').all(1)

还可以使用 np.where 而不是再次使用 map 映射 True/False:

df['Final'] = np.where(df['Final'], 'Pass', 'Fail')

几乎接近我所需的。有两件事情缺失:
  • 结果应该是通过/失败。我可以使用map来实现。
  • 公式只查找Pass,当它是Pass时,它会给出False。在我的问题中,我要求不区分大小写。有没有办法实现这一点?
- Adnan Hadi
@AdnanHadi,请检查更新。如果解决了你的问题,请接受并点赞。 - Space Impact

4
cols = ['SW_test', 'HW_test', 'QA_test']
df['Final'] = df[cols].eq('Pass').all(1)

    Item    SW_test HW_test QA_test Final
0   PC      Pass    Pass    Pass    Pass
1   Laptop  Fail    Fail    Pass    Fail
2   Mouse   Pass    Pass    Fail    Fail

1
您可以应用 lambda 函数来检查条件是否成立,然后可以用任何您想要的值替换 true/false 值。 例如:
#create a dataframe
df = pd.DataFrame({'a':['Pass','Pass'], 'b':['Pass','Fail']})


    a       b
0   Pass    Pass
1   Pass    Fail


创建一个满足条件的新列。
df['c'] = df.apply(lambda row: row.a=='Pass' and  row.b=='Pass', axis=1)


    a       b       c
0   Pass    Pass    True
1   Pass    Fail    False

将true/false的值替换为您想要显示的内容

df['c'] = df['c'].map({ True: 'Pass', False: 'Fail'})


    a       b       c
0   Pass    Pass    Pass
1   Pass    Fail    Fail


1
我建议不要在行操作中使用apply函数,这个过程会非常缓慢。更多信息请参见此处 - Kenan
谢谢你分享这个。今天学到了新东西 :) - Maleehak

0
# set column to "Pass" initially
df["Final"] = "Pass"

# set "Fail" rows
df.loc[(
    (df.loc[:, ["SW_test", "HW_test", "QA_test"]] == "Fail") | 
    (df.loc[:, ["SW_test", "HW_test", "QA_test"]] == "fail")
  ).any(axis = 1), "Final"] = "Fail"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接