【问题标题】:How to group variables according to the number of times they appear in a column?如何根据变量在列中出现的次数对变量进行分组?
【发布时间】:2020-05-06 11:54:47
【问题描述】:

我正在尝试使用一些分类变量在 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 应该有出现少于特定次数的变量。

【问题讨论】:

  • 请发布您的尝试,无论您是否找不到正确的逻辑。

标签: python pandas grouping data-conversion


【解决方案1】:

使用 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'])

假设您希望将相同计数类别(尤其是低计数类别)放入相同的假人中。

【讨论】:

  • 我明白了,但这只会使计数相同的组被分组,对吗?我问这个是因为我使用了一个类别 3、4 和 5 具有相同外观数量的示例,但这并不总是正确的。
  • 根据情况(以及您想要达到的目标),您可以应用一些基于阈值的修改。我会修改我的答案。
  • 组返回什么?我得到了 1, 2, 3, 4, ..., 10000。我以为它会返回 1 或 0
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 2023-02-03
  • 2020-02-09
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多