如何为高于高基数列的特定阈值的级别创建虚拟对象?
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)
所以我有这个基数很高的专栏:
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)