如何根据变量在列中出现的次数对变量进行分组?
How to group variables according to the number of times they appear in a column?
我正在尝试 运行 使用一些分类变量在 Python 中进行回归。所以我考虑将它们转换为假人。但是,我这里有一个问题。我正在使用的专栏有几个类别重复很多,而其他类别则没有。如果我应用虚拟转换,我将得到 5000 个虚拟对象。所以我想把只出现几次的类别分组。我怎样才能做到这一点?例如,如果类别 1 出现 2000 次,类别 2 出现 3000 次,但类别 4、5 和 6 各出现 30 次,类别 7 出现 10 次,类别 8 出现 5 次。如何将类别 4、5、6、7 和 8 分组?做类似的事情:如果类别出现少于 X 次,将它们分组。结果应该是第1组,第2组,group_x,group_x应该有出现次数少于特定次数的变量。
用pandas模块做起来相对简单。
想象一下 df 包含您的列 :
import pandas as pd
df = pd.DataFrame({ 'x':['a','b','c','a','b','a','d','e','f']})
你可以简单地计算里面的值:
cnt = df.x.value_counts()
并创建附加列说明给定行属于哪个组:
请注意,所有低计数分类值都将在同一组中。
df['group'] = df['x'].apply( lambda x: cnt[x] if cnt[x] >= 2 else 0 )
您可以将 2 的值修改为任何阈值,低于该阈值所有类别将属于同一组。最后像这样创建虚拟变量:
dummies = pd.get_dummies(df['group'])
假设您希望相同的计数类别(尤其是低计数类别)进入相同的假人。
我正在尝试 运行 使用一些分类变量在 Python 中进行回归。所以我考虑将它们转换为假人。但是,我这里有一个问题。我正在使用的专栏有几个类别重复很多,而其他类别则没有。如果我应用虚拟转换,我将得到 5000 个虚拟对象。所以我想把只出现几次的类别分组。我怎样才能做到这一点?例如,如果类别 1 出现 2000 次,类别 2 出现 3000 次,但类别 4、5 和 6 各出现 30 次,类别 7 出现 10 次,类别 8 出现 5 次。如何将类别 4、5、6、7 和 8 分组?做类似的事情:如果类别出现少于 X 次,将它们分组。结果应该是第1组,第2组,group_x,group_x应该有出现次数少于特定次数的变量。
用pandas模块做起来相对简单。 想象一下 df 包含您的列 :
import pandas as pd
df = pd.DataFrame({ 'x':['a','b','c','a','b','a','d','e','f']})
你可以简单地计算里面的值:
cnt = df.x.value_counts()
并创建附加列说明给定行属于哪个组: 请注意,所有低计数分类值都将在同一组中。
df['group'] = df['x'].apply( lambda x: cnt[x] if cnt[x] >= 2 else 0 )
您可以将 2 的值修改为任何阈值,低于该阈值所有类别将属于同一组。最后像这样创建虚拟变量:
dummies = pd.get_dummies(df['group'])
假设您希望相同的计数类别(尤其是低计数类别)进入相同的假人。