繁体   English   中英

pandas groupby 均值与 nan

[英]pandas groupby mean with nan

我有以下 dataframe:

date id  cars
2012 1    4  
2013 1    6
2014 1    NaN    
2012 2    10 
2013 2    20 
2014 2    NaN  

现在,我想为忽略 NaN 的每个 id 获取多年来汽车的平均值。 结果应该是这样的:

date id  cars  result
2012 1    4      5
2013 1    6      5
2014 1    NaN    5
2012 2    10     15
2013 2    20     15
2014 2    NaN    15

我有以下命令:

df["result"]=df.groupby("id")["cars"].mean()

命令运行没有错误,但结果列只有 NaN。 我做错什么了?

使用transform ,这将返回与原始大小相同的系列:

df["result"]=df.groupby("id")["cars"].transform('mean')
print (df)
   date  id  cars  result
0  2012   1   4.0     5.0
1  2013   1   6.0     5.0
2  2014   1   NaN     5.0
3  2012   2  10.0    15.0
4  2013   2  20.0    15.0
5  2014   2   NaN    15.0

你好,2017 年的老问题。 这只是另一种有很多开销的方式。 你写了关于只获得NaN值作为平均值(只要其中一个数字是NaN ), df["result"]=df.groupby("id")["cars"].mean() 2023年,我没有遇到这个问题。 也许,这已在以后的版本中修复? 不管怎样,如果你在任何时间和空间再次面对这个问题,你可能首先想知道如何在没有 NaN 权衡一切的情况下获得每个 id 的平均值:

import numpy as np
np.seterr(divide='ignore', invalid='ignore')
df.groupby(['id']).apply(lambda x: np.average(x['cars'].dropna()))

在此之后,加入 id:s。 我没有花时间展示这一点,因为这个答案对您手头的问题有很多开销,不应该投入使用。 可能只有一些人首先寻找一种方法来获得没有NaN的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM