[英]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.