我正在使用可以在UCI网站上找到的automotive.csv。我想在归一化损失属性中替换一些NaN。我认为更好的方法是根据符号计算平均值,因为符号会影响归一化损失的值。
因此,如果NaN的符号为3,则我只想要平均值为3的其他归一化损失的均值。我该如何实现?
例
表:
symb norm other attrs
1 100 8017 2
1 90 5019 2
-1 20 8017 1
-1 20 8870 1
1 NaN 8305 3
0 10 8305 3
3 200 8221 3
所以对于NaN,我只想从其他具有相同符号的行中获取均值
如果我用
automobile['normalizedlosses'].fillna(automobile['normalizedlosses'].mean(axis=0), inplace=True)
这将用我不想要的相同值替换所有NaN
最佳答案
您可以将GroupBy.transform
与mean
一起使用,以返回与原始DataFrame相同大小的Series
,因此可以通过Series.fillna
使用Series
:
s = automobile.groupby('symb')['norm'].transform('mean')
automobile['norm'] = automobile['norm'].fillna(s)
print (automobile)
symb norm other attrs
0 1 100.0 8017 2
1 1 90.0 5019 2
2 -1 20.0 8017 1
3 -1 20.0 8870 1
4 1 95.0 8305 3
5 0 10.0 8305 3
6 3 200.0 8221 3
关于python - 如何计算一列的均值,但仅包括某些行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55556243/