pandas之分箱操作

将连续数据进行离散化常用的有两种方式:等宽法和等频法

等宽法:离散化后的每个区间的差值相等。这样的缺点是可能会不同区间包含的元素数量相差较大。
等频法:离散化后的每个区间内包含的元素数量相等。这样的缺点是可能会将相同的元素划分到不同的区间里。

等宽法,利用pandas中的cut函数。

详见pandas的cut,qcut函数的使用和区别

df = pd.DataFrame(data=[x ** 2 for x in range(1, 21)], columns=['a'])
	a
0	1
1	4
2	9
3	16
4	25
5	36
6	49
7	64
8	81
9	100
10	121
11	144
12	169
13	196
14	225
15	256
16	289
17	324
18	361
19	400
df['b'] = pd.cut(df['a'], 5)
df
    a	     b
0	1	(0.601, 80.8]
1	4	(0.601, 80.8]
2	9	(0.601, 80.8]
3	16	(0.601, 80.8]
4	25	(0.601, 80.8]
5	36	(0.601, 80.8]
6	49	(0.601, 80.8]
7	64	(0.601, 80.8]
8	81	(80.8, 160.6]
9	100	(80.8, 160.6]
10	121	(80.8, 160.6]
11	144	(80.8, 160.6]
12	169	(160.6, 240.4]
13	196	(160.6, 240.4]
14	225	(160.6, 240.4]
15	256	(240.4, 320.2]
16	289	(240.4, 320.2]
17	324	(320.2, 400.0]
18	361	(320.2, 400.0]
19	400	(320.2, 400.0]

可以看到每个区间的差值都近似为80,但不同区间包含的元素相差较多。

# 也可以加label
df['b'] = pd.cut(df['a'], 5, labels=['q', 'w', 'e', 'r', 't'])
   a	b
0	1	q
1	4	q
2	9	q
3	16	q
4	25	q
5	36	q
6	49	q
7	64	q
8	81	w
9	100	w
10	121	w
11	144	w
12	169	e
13	196	e
14	225	e
15	256	r
16	289	r
17	324	t
18	361	t
19	400	t

等频法,利用pandas中的qcut函数,基于样本分位数进行分箱

详见pandas的cut,qcut函数的使用和区别

df = pd.DataFrame(data=[x ** 2 for x in range(1, 21)], columns=['a'])
	a
0	1
1	4
2	9
3	16
4	25
5	36
6	49
7	64
8	81
9	100
10	121
11	144
12	169
13	196
14	225
15	256
16	289
17	324
18	361
19	400
df['b'] = pd.qcut(df['a'], 5, labels=['q', 'w', 'e', 'r', 't'])
df
   a	b
0	1	q
1	4	q
2	9	q
3	16	q
4	25	w
5	36	w
6	49	w
7	64	w
8	81	e
9	100	e
10	121	e
11	144	e
12	169	r
13	196	r
14	225	r
15	256	r
16	289	t
17	324	t
18	361	t
19	400	t
df['b'].value_counts()
t    4
r    4
e    4
w    4
q    4
Name: b, dtype: int64

可以看到,每个区间内的元素数量都是相等的

df['b'] = pd.qcut(df['a'], [0, 0.1, 0.2, 0.7, 0.8, 1], labels=['q', 'w', 'e', 'r', 't'])
df['b'].value_counts()
e    10
t     4
r     2
w     2
q     2
Name: b, dtype: int64

可以看到,每个区间长度按照我们设定的长度等比例划分。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值