所以我的这一列具有很高的基数:
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以上的级别,任何建议将不胜感激,谢谢
答案 0 :(得分:1)
以您的情况
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)
答案 1 :(得分:0)
值计数提供了足够的信息来实现这一目标。
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)