我有一个数据框,其中一列本质上是分类的,此列中的许多值都在重复,但是有许多值的计数非常小,即一位数,而其他值则是3或4位。我想用“其他”值替换此分类列中所有值小于10的值。下面,我尝试通过示例数据框来模仿我的问题。
数据帧示例代码如下:
l1,l2 = [1,2,3,4,5, 6 ,7, 8,9,10], ['aa', 'bb', 'aa', 'bb', 'bb', 'ee', 'bb','gg','gg','gg']
dataframe = pd.DataFrame(zip(l1,l2), columns =['l1','l2'])
dataframe.l2.value_counts()
11 | l2 |
---|---|
1个 | 'aa' |
2 | 'bb' |
3 | 'aa' |
4 | 'bb' |
5 | 'bb' |
6 | '是' |
7 | 'bb' |
8 | 'gg' |
9 | 'gg' |
10 | 'gg' |
现在,如果我为“ l2”列打印value_counts(),我将获得“ l2”列中每个值的计数。
dataframe.l2.value_counts()
我的问题是,如何用值“ other”替换值“ <3”的此“ l2”列中的所有那些值,我期望的数据帧是:
11 | l2 |
---|---|
1个 | '其他' |
2 | 'bb' |
3 | '其他' |
4 | 'bb' |
5 | 'bb' |
6 | '其他' |
7 | 'bb' |
8 | 'gg' |
9 | 'gg' |
10 | 'gg' |
如您所见,此处所有值'aa'和'ee'的实例都被替换为'other',因为它们的值计数小于3。如何执行此操作?
用于Series.map
与Series.value_counts
每个组的重复计数,然后通过Series.mask
或设置值DataFrame.loc
:
mask = dataframe.l2.map(dataframe.l2.value_counts()) < 3
#alternative
#mask = dataframe.groupby('l2').l2.transform('size') < 3
dataframe.l2 = dataframe.l2.mask(mask, 'other')
#alternative
#dataframe.loc[mask, 'l2'] = 'other'
print (dataframe)
l1 l2
0 1 other
1 2 bb
2 3 other
3 4 bb
4 5 bb
5 6 other
6 7 bb
7 8 gg
8 9 gg
9 10 gg
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句