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