Добавить столбец с со средней зарплатой по специальностям

Есть DataFrame, нужно добавит столбец.

import  pandas as pd
data = {'name': ['Vinay', 'Kushal', 'Aman', 'Rahui',
                 'Ramesh'],
        'occ': ['engineer', 'doctor', 'engineer', 'doctor', 'doctor'],
        'salary': [60000, 70000, 50000, 60000, 65000]}

df = pd.DataFrame(data)
print(df, '\n')

Ответы (1 шт):

Автор решения: Алексей Р

Если нужен именно столбец, то группируем по специальности и используем метод transform('mean'):

data = {'name': ['Vinay', 'Kushal', 'Aman', 'Rahui',
                 'Ramesh'],
        'occ': ['engineer', 'doctor', 'engineer', 'doctor', 'doctor'],
        'salary': [60000, 70000, 50000, 60000, 65000]}

df = pd.DataFrame(data)
df['mean_salary'] = df.groupby('occ').salary.transform('mean')
print(df)
     name       occ  salary  mean_salary
0   Vinay  engineer   60000      55000.0
1  Kushal    doctor   70000      65000.0
2    Aman  engineer   50000      55000.0
3   Rahui    doctor   60000      65000.0
4  Ramesh    doctor   65000      65000.0 

Если же нужно просто среднее по специальностям, то можно через сводную таблицу (агрегирующая функция по умолчанию - 'mean'):

data = {'name': ['Vinay', 'Kushal', 'Aman', 'Rahui',
                 'Ramesh'],
        'occ': ['engineer', 'doctor', 'engineer', 'doctor', 'doctor'],
        'salary': [60000, 70000, 50000, 60000, 65000]}

df = pd.DataFrame(data)
df = df.pivot_table(index='occ', values='salary')
print(df)
           salary
occ              
doctor    65000.0
engineer  55000.0 
→ Ссылка