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

Rob*_*988 7 python numpy dataframe pandas

假设我们有一个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
Run Code Online (Sandbox Code Playgroud)

要替换NA,我们可以使用df ["B"].fillna(df ["B"].median()),但它会用"B"中的所有数据的中位数填充NA

有没有办法可以使用某个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
Run Code Online (Sandbox Code Playgroud)

谢谢!

beh*_*uri 8

在pandas中,您可以使用transform获取null-fill值:

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 您可以同时为所有列执行此操作并避免必须指定列吗?例如,在R中,这可以作为df < - na.roughfix(df)来完成 (2认同)