-2

I have created a function like this.

def age_group(age):
    if age >= 18 & age <= 25:
        return '18-25'
    elif age > 25 & age <= 40:
        return '25-40'
    elif age > 40 & age <= 55:
        return '40-55 ' 
    else:
        return '55+'
age_group(20)

Then I have used the apply method like this survey['age_group']=survey['age'].apply(age_group)

But the age_group column returns '18-25' age group in all the columns even when the age is greater than 25 or less than 18

ThePyGuy
  • 17,779
  • 5
  • 18
  • 45
adadadad
  • 71
  • 1
  • 7

2 Answers2

1

Use pd.cut:

survey['age_group'] = pd.cut(survey['age'],
                             bins=[18,25,40,55, 70],
                             labels=['18-25', '25-40', '40-55', '55+',
                             include_lowest=True)
Quang Hoang
  • 146,074
  • 10
  • 56
  • 74
0

All you need to do is using and instead of &:

def age_group(age):
    if age >= 18 and age <= 25:
        return '18-25'
    elif age > 25 and age <= 40:
        return '25-40'
    elif age > 40 and age <= 55:
        return '40-55' 
    else:
        return '55+'

or you can keep it simpler:

def age_group(age):
    if 18 <= age <= 25:
        return '18-25'
    if 25 < age <= 40:
        return '25-40'
    if 40 < age <= 55:
        return '40-55 ' 
    return '55+'
Riccardo Bucco
  • 13,980
  • 4
  • 22
  • 50