Python Pandas add column for row-wise max value of selected columns

data = {'name' : ['bill', 'joe', 'steve'],
'test1' : [85, 75, 85],
'test2' : [35, 45, 83],
'test3' : [51, 61, 45]}
frame = pd.DataFrame(data)

I would like to add a new column that shows the max value for each row.

desired output:

 name test1 test2 test3 HighScore
bill  75    75    85    85
joe   35    45    83    83
steve  51   61    45    61

Sometimes

frame['HighScore'] = max(data['test1'], data['test2'], data['test3'])

works but most of the time gives this error:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Why does it only work sometimes? Is there another way of doing it?

107209 次浏览
>>> frame['HighScore'] = frame[['test1','test2','test3']].apply(max, axis=1)
>>> frame
name  test1  test2  test3  HighScore
0   bill     85     35     51        85
1    joe     75     45     61        75
2  steve     85     83     45        85
>>> frame['HighScore'] = frame[['test1','test2','test3']].max(axis=1)
>>> frame
name  test1  test2  test3  HighScore
0   bill     85     35     51         85
1    joe     75     45     61         75
2  steve     85     83     45         85

if a max or min value between multiple columns in a df is to be determined then use:

df['Z']=df[['A','B','C']].apply(np.max,axis=1)