python对相似的分类值进行分组

时间:2016-04-10 13:42:23

标签: python pandas group-by

我的数据集有一列,其中包含大量唯一值(对象类型)。我相信有些是微不足道的(如果它们是多余的),所以我希望将它们分组,如果它们低于某个确定的阈值。我使用标签编码器模块将列转换为分类值,然后我想组合那些计数小于指定阈值的类别。 因此,对于我准备的这个样本集,如果' bin中某个类的总数(freq)是多少?列等于或小于2,它会在&newbspins' new_bins'下获得新值。 ' o'代替。所以bin(' c' d')将会在&newbspins' new_bins'中被更改。到' o'。

    id  |  bin | new_bins
======== =================
    1       a       a
    2       a       a
    3       b       b
    4       c       o
    5       b       b
    6       a       a
    7       b       b
    8       a       a
    9       c       o
    10      a       a
    11      d       o
    12      d       o

df.groupby(['bin'], sort=True).count())

这是我试过的一行代码,但它没有达到我想要的效果。我知道这有点模糊,因为我没有代码。我认为这个问题是指箱子,但也许它被称为别的东西,我似乎无法对一个类似的例子进行罚款。在一场讨价还价的比赛中,它被称为组合级别。也许只是命名我应该寻找的术语或短语也会有所帮助。

1 个答案:

答案 0 :(得分:1)

这将对您有所帮助:

In [127]: df
Out[127]:
   id bin new_bins
0   1   a        a
1   2   a        a
2   3   b        o
3   4   c        o
4   5   b        o
5   6   a        a
6   7   b        o
7   8   a        a
8   9   c        o
9  10   a        a

将项目分组:

In [128]: dfg = df.groupby('bin').count()

In [129]: dfg
Out[129]:
     id  new_bins
bin
a     5         5
b     3         3
c     2         2

用于选择符合条件的项目

In [130]: dfg[dfg['id'] > 2]
Out[130]:
     id  new_bins
bin
a     5         5
b     3         3

In [143]: val = dfg[dfg['id'] <= 2]

In [144]: val
Out[144]:
     id  new_bins
bin
c     2  MODIFIED

更改符合条件的列的值

In [147]: df.loc[df['bin'] == val.index[0], 'new_bins'] = 'MOD'

In [148]: df
Out[148]:
   id bin new_bins
0   1   a        a
1   2   a        a
2   3   b        o
3   4   c      MOD
4   5   b        o
5   6   a        a
6   7   b        o
7   8   a        a
8   9   c      MOD
9  10   a        a