Как создать манекен для уровней выше определенного порога столбца с высокой кардинальностью? - PullRequest
0 голосов
/ 18 мая 2019

поэтому у меня есть этот столбец с большим количеством элементов:

   Df['Education_Degree'].value_counts():

   Masters Degree in Mathematics                      5550
   Bachelors Degree in Physics                        4420
   Bacherlors Degree                                  3210
   Masters Degree in Mechanics                        2540
   Masters Degree                                     1200
   Masters Degree in Economics                        995
   .
   .
   .

   Name: Education_Degree, Length: 356, dtype: int64

И что я хочу сделать, это создать фиктивные столбцы, но только для уровней выше 995, любое предложение будет высоко оценено, спасибо

Ответы [ 2 ]

1 голос
/ 18 мая 2019

В вашем случае

s=Df['Education_Degree'].value_counts()
sdumm=pd.get_dummies(Df.loc[Df['Education_Degree'].isin(s.index[s>=995]),'Education_Degree'])

Тогда просто concat

yourdf=pd.concat([Df,sdumm.reindex(Df.index).fillna(0)],axis=1)
0 голосов
/ 19 мая 2019

Значение счетчика предоставляет достаточно информации для этого.

c=Df['Education_Degree'].value_counts()

Возвращает объект Series .И мы можем использовать это для создания манекенов.Или мы можем использовать другой способ получения значения счетчика:

c=Df.groupby('Education_Degree', sort=False)['Education_Degree'].count().sort_values(ascending=False)

Результат будет таким же.

Как только мы получим объект серии, мы сможем создать макеты.Но есть и другое решение.Вместо этого получаем столбцы, которые мы хотели бы сохранить:

c=c[c>995]

Мы можем получить столбцы, которые нам не нравятся.

c=c[c<=995]
c_remove = c.index.tolist() # list of columns not to keep

Таким образом, мы даже не вызываем get_dummies(), все, что мы используем, это:

for i in range(0, len(Df)):
    c=Df.loc[i,'Education_Degree']
    Df.loc[i, c]=1

И, наконец, мы удалим столбцы:

Df.drop(c_remove, axis=1)
...