理解Python中DataFrame的执行

我刚开始学习Python,我想了解DataFrame中的执行过程。我们可以用kaggle.com上找到的数据集(泰坦尼克号:从灾难中学习机器学习)来举个例子。我想用各自性别的平均值替换NaN值,也就是说,男性NaN值应该用男性年龄的平均值替换,反之亦然。我通过使用以下代码实现了这一点:

_data['new_age']=_data['new_age'].fillna(_data.groupby('Sex')['Age'].transform('mean'))

我的问题是,在执行代码时,这行代码如何知道某一行属于男性,并且NaN值应该用男性的平均值替换,而女性的值应该用女性的平均值替换?

enter image description here


回答:

这是因为groupby + transform。当你使用一个返回每个组标量值的聚合函数进行分组时,普通的groupby会将每个独特的分组键压缩成一行。

np.random.seed(42)df = pd.DataFrame({'Sex': list('MFMMFFMMFM'),                   'Age': np.random.choice([1, 10, 11, 13, np.NaN], 10)},                   index=list('ABCDEFGHIJ'))df.groupby('Sex')['Age'].mean()#Sex#F    10.5                # 一行F#M    11.5                # 一行M#Name: Age, dtype: float64

使用transform会根据行所属的组,将结果广播回原始索引。

df.groupby('Sex')['Age'].transform('mean')#A    11.5  # 属于M#B    10.5  # 属于F#C    11.5  # 属于M#D    11.5#E    10.5#F    10.5#G    11.5#H    11.5#I    10.5#J    11.5#Name: Age, dtype: float64

为了更清楚地说明,我将转换后的结果重新赋值,现在你可以看到.fillna是如何得到正确的平均值的。

df['Sex_mean'] = df.groupby('Sex')['Age'].transform('mean')

  Sex   Age  Sex_meanA   M  13.0      11.5B   F   NaN      10.5  # NaN将被填充为10.5C   M  11.0      11.5D   M   NaN      11.5  # NaN将被填充为11.5E   F   NaN      10.5  # NaN将被填充为10.5F   F  10.0      10.5G   M  11.0      11.5H   M  11.0      11.5I   F  11.0      10.5J   M   NaN      11.5  # NaN将被填充为11.5

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注