群聚編碼問題?
程式碼:
# 取一個類別型欄位, 與一個數值型欄位, 做群聚編碼
df['Sex'] = df['Sex'].fillna('None')
mean_df = df.groupby(['Sex'])['Age'].mean().reset_index()
mode_df = df.groupby(['Sex'])['Age'].apply(lambda x: x.mode()).reset_index()
median_df = df.groupby(['Sex'])['Age'].median().reset_index()
max_df = df.groupby(['Sex'])['Age'].max().reset_index()
temp = pd.merge(mean_df, mode_df,how='left',on=['Sex'])
temp = pd.merge(temp, median_df,how='left',on=['Sex'])
temp = pd.merge(temp, max_df,how='left',on=['Sex'])
temp.columns = ['Sex','Cabin_age_Mean', 'Cabin_age_Mode', 'Cabin_age_Median', 'Cabin_age_Max','p']
temp
我這樣用出來的欄位怎麼會有六個?
回答列表
-
2019/10/17 下午 10:29張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
我看不太懂你的問題,可以描述多一點嗎?程式碼執行後的六個欄位,不就是你自己定義的六個嗎?
-
2019/10/18 上午 11:11陳明佑 (Ming You Chen)贊同數:1不贊同數:0留言數:1
因為你對 mode 的處理有誤, 群聚編碼要使用 mode (眾數) 時要特別小心
因為眾數可能有多個, 此時就會傳回編號與眾數內容
以這邊的例子而言, 第三與第四 column 才是 mode 的內容
他告訴你 : female 中 age 欄眾數只有一個 '24.0 (第0個)'
而 male 中 age 欄眾數有三個 '19.0' (第0個)/ '25.0' (第1個) / '28.0' (第2個)
對照一下, 應該就能了解
因此第五 column 才是 Median, 第六 column 才是 Max
(開頭前幾欄就有人3X歲了, Max 當然不會是 27.0 或 29.0吧?)
這種資料面問題要 debug
建議在中間就先把一些變數印出來看 (例如先印出 mode_df 看)
就會比較容易抓到問題了
-
2019/10/18 上午 11:57張維元 (WeiYuan)贊同數:1不贊同數:0留言數:1
根據 明佑 專家的意見,是原文的這段自己寫錯了嗎?
```
temp.columns = ['Sex','Cabin_age_Mean', 'Cabin_age_Mode', 'Cabin_age_Median', 'Cabin_age_Max','p']
```
-
2019/10/18 上午 11:59張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
「以這邊的例子而言, 第三與第四 column 才是 mode 的內容
他告訴你 : female 中 age 欄眾數只有一個 '24.0 (第0個)'
而 male 中 age 欄眾數有三個 '19.0' (第0個)/ '25.0' (第1個) / '28.0' (第2個)
對照一下, 應該就能了解」
這一段的回答是解釋 Row 的產生?可是原文問的是欄位怎麼會有六個?這是同一個問題嗎?