Issue
I have created a function to give out a rank based on the value in each cell of the table below:
Table name is "ranked"
Date MMM AOS ABT
2016-01-31 55.0 411.0 102.0
2016-02-29 44.0 425.0 96.0
2016-03-31 29.0 410.0 70.0
2016-04-30 29.0 425.0 87.0
2016-05-31 46.0 409.0 52.0
Function:
def get_rank(x):
if 1 <= x < 96:
return 1
elif 96 <= x < 193:
return 2
elif 193 <= x < 289:
return 3
elif 289 <= x <= 385:
return 4
elif x > 385:
return 5
I have tried to apply the function using lambda:
ranked.apply(lambda x: get_rank(x))
However it gives me the error message:
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
The end goal is to have a 1 for all values in the table that are below 96, a 2 for all values higher than 192 and smaller than 289 …. and so on up to 5.
Could you please give me a hint how I can easily apply this function to the table?
Appreciate your help!
Solution
Use applymap instead:
>>> ranked[['MMM','AOS','ABT']].applymap(get_rank)
Should return the sub-dataframe "MMM, AOS, ABT" resulting from applying your get_rank()
function to each value.
Answered By – Brandt
Answer Checked By – Pedro (BugsFixing Volunteer)