基于行类型的熊猫数据框中的Fillna

时间:2018-06-30 19:30:39

标签: python pandas data-science

我有一个像这样的数据框。我需要根据动物类型用中位数替换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

1 个答案:

答案 0 :(得分:1)

GroupBy.transform用于median,用于与原始DataFrame大小相同的组,因此可以使用fillna替换NaN s:

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