Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有1000多个类别的变量分组_Python_Pandas_Machine Learning_Data Science - Fatal编程技术网

Python 具有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计数,就可以生

一个数据框的一个变量中有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计数
,就可以生成次要标题列

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