Python 具有1000多个类别的变量分组
一个数据框的一个变量中有60000多个类别。我想将值计数小于1000的类别分组为“其他”。Python 具有1000多个类别的变量分组,python,pandas,machine-learning,data-science,Python,Pandas,Machine Learning,Data Science,一个数据框的一个变量中有60000多个类别。我想将值计数小于1000的类别分组为“其他”。 如何做到这一点?您可以通过创建第二列title\u updated,并将其用于groupby temp_df = data['title'].values_counts().reset_index() temp_df.columns = ['title','title_count'] data = pd.merge(data,temp_df,on=['title']) 一旦您有了标题\u计数,就可以生
如何做到这一点?您可以通过创建第二列
title\u updated
,并将其用于groupby
temp_df = data['title'].values_counts().reset_index()
temp_df.columns = ['title','title_count']
data = pd.merge(data,temp_df,on=['title'])
一旦您有了标题\u计数
,就可以生成次要标题列
def generate_title(inp):
inp = inp.values
title = inp[0]
title_count = inp[1]
if title_count < 1000:
return 'Other'
else:
return title
data['title_updated'] = data[['title','title_count']].apply(generate_title,axis=1)
data['title_updated'].value_counts()
def生成标题(inp):
inp=inp.values
title=inp[0]
title_count=inp[1]
如果标题计数小于1000:
返回“其他”
其他:
返回标题
数据['title\u updated']=数据['title','title\u count']]。应用(生成\u title,axis=1)
数据['title_updated'].值_计数()
完成此操作后,我将其设置为观察次数最少,下面的任何内容都被归类为其他
下面是一个示例,其中包含一些示例数据:
df = pd.DataFrame(
data = {
'group':['a','a','a','b','c'],
'value':[1,2,3,4,5]
}
)
minimum_count = 2
counts = df['group'].value_counts()
to_combine = counts[counts<minimum_count].index #Get a list of values to combine
mask = df['group'].isin(to_combine) # Get mask of values to combine
df['combined'] = df['group'] # Create a new column that will store combined values
df.loc[mask,'combined'] = 'Other' #Sets value of the columns to combine to `Other`.
考虑通过字典将值计数映射到一个新列,然后有条件地调整:
val_dict=data['title'].value_counts().to_dict()
数据['vcount']=数据['title'].替换(val_dict)
数据['title']=数据['title']。其中(数据['vcount'].ge(1000),'Others')
您的问题缺乏细节。加上你尝试过的,这是一个非常优雅的解决方案。虽然我的解决方案可行,但无论是从代码行还是从执行所需的时间来看,这都更有效。
group value combined
0 a 1 a
1 a 2 a
2 a 3 a
3 b 4 Other
4 c 5 Other