假设我们有一个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
谢谢!
答案 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