根据行类型填充 pandas 数据框

Fillna in pandas dataframe based on row type

我有一个像这样的数据框。我需要根据动物类型用中值替换 NaN。例如,我需要计算猫的中位数,然后用这个值只用 NaN 替换猫。有没有一种方法可以在一个命令中执行此操作,或者我需要为每种类型手动执行此操作?

  animal  age  weight priority
a    cat  2.5       1      yes
b    cat  1.0       3      yes
c    dog  0.5       6       no
d    dog  NaN       8      yes
e    cat  5.0       4       no
f    cat  2.0       3       no
g    dog  3.5      10       no
h    cat  NaN       2      yes
i    dog  7.0       7       no
j    dog  3.0       3       no

使用 GroupBy.transform for median for groups with same size as original DataFrame, so is possible use fillna 替换 NaNs:

df['age'] = df['age'].fillna(df.groupby('animal')['age'].transform('median'))
print (df)
  animal   age  weight priority
a    cat  2.50       1      yes
b    cat  1.00       3      yes
c    dog  0.50       6       no
d    dog  3.25       8      yes
e    cat  5.00       4       no
f    cat  2.00       3       no
g    dog  3.50      10       no
h    cat  2.25       2      yes
i    dog  7.00       7       no
j    dog  3.00       3       no

详情:

print (df.groupby('animal')['age'].transform('median'))
a    2.25
b    2.25
c    3.25
d    3.25
e    2.25
f    2.25
g    3.25
h    2.25
i    3.25
j    3.25
Name: age, dtype: float64