我的数据集有一列,其中包含大量唯一值(对象类型)。我相信有些是微不足道的(如果它们是多余的),所以我希望将它们分组,如果它们低于某个确定的阈值。我使用标签编码器模块将列转换为分类值,然后我想组合那些计数小于指定阈值的类别。 因此,对于我准备的这个样本集,如果' 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())
这是我试过的一行代码,但它没有达到我想要的效果。我知道这有点模糊,因为我没有代码。我认为这个问题是指箱子,但也许它被称为别的东西,我似乎无法对一个类似的例子进行罚款。在一场讨价还价的比赛中,它被称为组合级别。也许只是命名我应该寻找的术语或短语也会有所帮助。
答案 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