如何为高于高基数列的特定阈值的级别创建虚拟对象?

How to create dummy for levels above a certain threshold of a column with high cardinality?

所以我有这个基数很高的专栏:

   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 以上的级别,任何建议都将不胜感激,谢谢

你的情况

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)

值计数提供了足够的信息来做到这一点。

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

这个returnsSeries对象。我们可以用它来创建假人。或者我们可以使用不同的方式来获取值计数:

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)