这是我拥有的数据框的一部分:
Title | Age
------+--------
Mr. | 30
Mr. | NaN
Mr. | 32
Mrs. | 28
Mrs. | 16
Mr. | 34
Mrs. | NaN
编辑:我添加了最后一行,以澄清问题
我要估算NaN(第二行和最后一行),对于第二行,它应该使用其他“先生”的均值。在数据框中,因此在这种情况下应为32,在最后一行应使用其他“夫人”的平均值,因此应为22
计算均值就像做一样容易
value = df.loc[df["Title"] == "Mr."]["Age"].mean()
所以我写了一个叫做agefun的函数:
def agefun(df, t):
return df.loc[df["Title"] == t]["Age"].mean()
现在,它如何工作,如何将这个函数与fillna()函数一起使用?我想要类似的东西:
df['Age'].fillna(agefun(df, this_row_title))
但是,当然这是行不通的,我不知道如何告诉函数我喜欢该特定行中Title对应的值。
如何执行呢?
变换保持与数据帧中原始序列相同的形状。
df['Age'] = df.groupby('Title').transform(lambda group: group.fillna(group.mean()))
>>> df
Title Age
0 Mr. 30
1 Mr. 32 # (30 + 32 + 34) / 3 = 32
2 Mr. 32
3 Mrs. 28
4 Mrs. 16
5 Mr. 34
在上面的示例中,它NaN
通过计算组的平均值(即,其中Title
is为的所有行的平均值)使除第二行填充的第二行中的一个值之外的所有值保持不变Mr.
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句