我的数据缺少“年龄”的值,我希望根据“分组”列的“平均值”将其平均替换。在命令之后:
df.groupby('Title').mean()['Age']
例如,我有一个列表
32先生
小姐21.7
28女士
等
我尝试过:
df['Age'].replace(np.nan, 0, inplace=True)
df[(df.Age==0.0)&(df.Title=='Mr')]
仅查看缺少年龄且标题是一种类型但不起作用的单元格。
问题1.尽管多个单元格同时满足两个条件(年龄= 0.0,标题为mr),为什么上面的代码没有显示任何单元格
问题2。如上所述,如何根据组平均值替换所有缺失值?
答案 0 :(得分:1)
我无法重现第一个错误,因此,如果我使用如下示例:
import pandas as pd
import numpy as np
np.random.seed(111)
df = pd.DataFrame({'Title':np.random.choice(['Mr','Miss','Mrs'],20),'Age':np.random.randint(20,50,20)})
df.loc[[5,9,10,11,12],['Age']]=np.nan
数据框如下:
Title Age
0 Mr 42.0
1 Mr 28.0
2 Mr 25.0
3 Mr 32.0
4 Mrs 26.0
5 Miss NaN
6 Mrs 32.0
7 Mrs 33.0
8 Mrs 25.0
9 Mr NaN
10 Miss NaN
11 Mr NaN
12 Mrs NaN
13 Miss 38.0
14 Mr 31.0
15 Mr 42.0
16 Mr 24.0
17 Mrs 23.0
18 Mrs 49.0
19 Miss 27.0
我们可以仅需再执行一步就可以替换它:
ave_age = df.groupby('Title').mean()['Age']
df.loc[pd.isna(df['Age']),'Age'] = ave_age[df.loc[pd.isna(df['Age']),'Title']].values
答案 1 :(得分:0)
问题1: 请提供摘录,以便能够重现错误
问题2:
尝试df['Age'].fillna(f.groupby('Title')['Age'].transform('mean'))
。这类似于Pandas: filling missing values by mean in each group