繁体   English   中英

如何在缺失值的Pandas中使用聚合函数

[英]How to use aggregate functions in Pandas with missing values


我是熊猫的新手,正在尝试Titanic数据集。 使用groupby函数后,如果我应用mean() ,那么它将正常工作。 但是当我计算std() ,我得到的是NaN 我了解到,默认情况下,mean排除了丢失的值,并且不考虑它们,但std将其考虑在内。

我尝试更改ddof=1skipna=True但它们不适用于groupby。 请帮忙。 我的代码中的标题是使用功能工程从名称派生的。 我正在尝试根据指定组中所有乘客年龄的均值和标准差预测年龄的缺失值(就像船长的平均年龄要短些。因此,船长的缺失年龄将仅根据通过groupby功能掌握)

std = train_df.groupby(['Title'])['Age'].std()
print(std)

mean = train_df.groupby(['Title'])['Age'].mean()
print(mean)



Output for sd
Title
 Capt                  NaN
 Col              2.828427
 Don                   NaN
 Dr              19.295941
 Jonkheer              NaN
 Lady                  NaN
 Major            4.949747
 Master           3.792621
 Miss            14.525089
 Mlle             0.000000
 Mme                   NaN
 Mr              17.604569
 Mrs             16.292678
 Ms                    NaN
 Rev             13.136463
 Sir                   NaN
 the Countess          NaN


Output for mean
Title
 Capt            70.000000
 Col             58.000000
 Don             40.000000
 Dr              36.000000
 Jonkheer        38.000000
 Lady            48.000000
 Major           48.500000
 Master           4.025000
 Miss            17.450549
 Mlle            24.000000
 Mme             24.000000
 Mr              24.903288
 Mrs             31.016000
 Ms              28.000000
 Rev             43.166667
 Sir             49.000000
 the Countess    33.000000


DATAFRAME
   Survived  Pclass                                               Name     Sex  Age  SibSp  Parch            Ticket     Fare Embarked  Title
0         0       3                            Braund, Mr. Owen Harris    male   22      1      0         A/5 21171   7.2500        S     Mr
1         1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female   38      1      0          PC 17599  71.2833        C    Mrs
2         1       3                             Heikkinen, Miss. Laina  female   26      0      0  STON/O2. 3101282   7.9250        S   Miss
3         1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female   35      1      0            113803  53.1000        S    Mrs
4         0       3                           Allen, Mr. William Henry    male   35      0      0            373450   8.0500        S     Mr

标准差的计算公式为sqrt(sum((xx.mean())**2)/(n-ddof)) ,其中n是序列的长度, ddof是均值自由度。 文档

在标准的统计实践中,ddof = 1提供了无穷总体方差的无偏估计量。 ddof = 0为正态分布变量提供方差的最大似然估计。

请注意, 默认值 ddof1大熊猫 ,但0numpy的 ddof为1时,由于除以零,只有一个条目的组将获得NaN:

df.groupby(['Title'])['Age'].agg(['count','std'])
               count        std
Title                          
 Capt              1        NaN
 Col               2   2.828427
 Don               1        NaN
 Dr                6  12.016655
 Jonkheer          1        NaN
 Lady              1        NaN
 Major             2   4.949747
 Master           36   3.619872
 Miss            146  12.990292
 Mlle              2   0.000000
 Mme               1        NaN
 Mr              398  12.708793
 Mrs             108  11.433628
 Ms                1        NaN
 Rev               6  13.136463
 Sir               1        NaN
 the Countess      1        NaN

如果您想要stdddof0 ,则可ddof=0熊猫函数指定ddof=0 ,或者使用numpy函数的ddof默认值为0

df.groupby(['Title'])['Age'].std(ddof=0)
df.groupby(['Title'])['Age'].agg(lambda x: pd.np.std(x))

暂无
暂无

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

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