首页 > 解决方案 > Pandas groupby 变换('mean')skipna=False

问题描述

我想通过 groupby 获得平均值并将其分配给所有行。这是我正在使用的代码。但是,这是忽略 Nan 即 skipna=True。我想通过选项 skipna=False 来获得预期的输出。

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

Input dataframe

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

Current output:
   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

Expected output:
   date  id  cars  result
0  2012   1   4.0     3.33
1  2013   1   6.0     3.33
2  2014   1   NaN     3.33
3  2012   2  10.0    10.0
4  2013   2  20.0    10.0
5  2014   2   NaN    10.0

标签: pythonpandas

解决方案


df['result'] = df.fillna(0).groupby("id")["cars"].transform('mean')

推荐阅读