我正在使用可以在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.transformmean一起使用,以返回与原始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/

10-14 17:47
查看更多