#import libries
import pandas as pd
import numpy as np
# Data dictionary
data_dict = {'Country': ['USA','UK','MAL','MAL','MAL','MAL','MAL','MAL'],
'Age': ['52','23','25','25','?','25','25','?'], 'Sal': ['12345','1142','4456','4456','2345','3342','3452','3562'],
'OnWork': ['No','Yes','No','No','Yes','Yes','No','No']}
# Convert dictionary to dataframe
df = pd.DataFrame(data_dict)
# print input df
print(df)
**
Country Age Sal OnWork
0 USA 52 12345 No
1 UK 23 1142 Yes
2 MAL 25 4456 No
3 MAL 25 4456 No
4 MAL ? 2345 Yes
5 MAL 25 3342 Yes
6 MAL 25 3452 No
7 MAL ? 3562 No
**
# '?' Values replace with NaN
df.Age=df.Age.where(df.Age!='?')
# Convert string values to numeric
df["Age"] = pd.to_numeric(df["Age"])
# Get mean values Separately
mean_list = df.groupby('OnWork')['Age'].mean().astype(int)
# print mean values
print(mean_list)
**
No 31
Yes 24
**
# Replace the missing age value
df['Age'] = df.apply(
lambda row: mean_list['Yes'] if np.isnan(row['Age'])&(row['OnWork']=='Yes') else mean_list['No'] if np.isnan(row['Age'])&(row['OnWork']=='No') else row['Age'],
axis=1
)
# print final df
print(df)
**
Country Age Sal OnWork
0 USA 52.0 12345 No
1 UK 23.0 1142 Yes
2 MAL 25.0 4456 No
3 MAL 25.0 4456 No
4 MAL 24.0 2345 Yes
5 MAL 25.0 3342 Yes
6 MAL 25.0 3452 No
7 MAL 31.0 3562 No
**