logo
Loading...

群聚編碼問題? - Cupoy

程式碼:# 取一個類別型欄位, 與一個數值型欄位, 做群聚編碼df['Sex'] = df['Sex...

ml100-3

群聚編碼問題?

2019/10/17 下午 09:52
機器學習共學討論版
嚴詩豪
觀看數:11
回答數:4
收藏數:0
ml100-3

程式碼:

# 取一個類別型欄位, 與一個數值型欄位, 做群聚編碼

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 的產生?可是原文問的是欄位怎麼會有六個?這是同一個問題嗎?