Вы можете попробовать это:
sal=df['salary'].where(df['salary'].gt(0))
df['salary'] = sal.fillna(sal.groupby(df['occupation']).transform('mean'))
df
Вывод:
ID Name occupation salary
0 1 p1 O1 1000.0
1 2 p2 O2 2000.0
2 3 p3 O3 4000.0
3 4 p4 O1 1500.0
4 5 p5 O1 1250.0
5 6 p6 O2 2100.0
6 7 p7 O1 1250.0
7 8 p8 O2 2050.0
Подробности, используйте where
, чтобы вернуться только к «действительной» (больше нуля) зарплате, и введитеNaN для других значений. Далее fillna
с groupby
, transform
, mean
.