Python-pandas将NA替换为数据帧中组的中位数或平均值

时间:2015-11-06 18:34:55

标签: python numpy pandas dataframe

假设我们有一个df:

    A       B
   apple   1.0
   apple   2.0
   apple    NA
   orange   NA
   orange  7.0
   melon   14.0
   melon   NA
   melon   15.0
   melon   16.0

替换NA,我们可以使用df [" B"]。fillna(df [" B"]。median()),但它会用中位数填充NA " B"

中的所有数据

我们有什么方法可以使用某个A的中位数来代替NA(如下所示):

    A       B
   apple   1.0
   apple   2.0
   apple   **1.5**
   orange  **7.0**
   orange  7.0
   melon   14.0
   melon   **15.0**
   melon   15.0
   melon   16.0

谢谢!

2 个答案:

答案 0 :(得分:8)

在pandas中,您可以使用transform获取空填充值:

>>> med = df.groupby('A')['B'].transform('median')
>>> df['B'].fillna(med)
0     1.0
1     2.0
2     1.5
3     7.0
4     7.0
5    14.0
6    15.0
7    15.0
8    16.0
Name: B, dtype: float64

答案 1 :(得分:2)

R中,可以使用na.aggregate/data.table替换该组NA的{​​{1}}值。我们转换了' data.frame'到' data.table' (mean),按' A'分组,将setDT(df)应用于' B'

na.aggregate