我正在學習一些基本的數據科學,我正在研究泰坦尼克號數據集?!澳挲g”列具有空值,我想用其他列的平均值填充,例如“Pclass”或“”?!癙艙”是指乘客艙位,根據乘客是否持有1等艙、2等艙或3等艙機票,有三個值(1、2、3)。我試圖通過編寫一個函數來概括此過程,該函數采用兩個列名,“Age”和我們要用于聚合的列。我想不出如何完全概括這一點,所以現在,假設我基于Pclass進行聚合。我根據Pclass得到了平均年齡,如下所示:# Figure out the mean age for each classmean_age = round(df_train.groupby('Pclass').mean()['Age'])mean_age我試圖定義如下函數(38,30和25)來自mean_age:def fill_age(data, col1, col2): if data[col1].isnull(): if data[col2] == 1: return 38 elif data[col2] == 2: return 30 else: return 25 else: return data[col1]并嘗試使用 .apply():df_train['Age'] = df_train.apply(fill_age(df_train,'Age','Pclass'), axis = 1)我在這里犯了什么錯誤,我該如何思考這個問題來修復它并進一步推廣它?編輯:以下行似乎已經工作,但我需要它來將更改應用于數據幀本身,并且我不能將“就地”與.apply()一起使用df_train.groupby('Pclass')['Age'].apply(lambda x: x.fillna(round(x.mean())))
1 回答

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
您不應在 中調用函數,而應通過 或 關鍵字參數傳遞函數和參數:apply
args=()
df['Age'] = df.apply(fill_age, col1='Age', col2='Pclass', axis=1)
但是有更好的方法可以通過矢量化來做到這一點:
df['Age'] = df['Age'].fillna(df.groupby('Pclass')['Age'].transform('mean'))
添加回答
舉報
0/150
提交
取消