我有一个像这样的熊猫系列:
0 1787
1 4789
2 1350
3 1476
4 0
5 747
6 307
7 147
8 221
9 -88
10 9374
11 264
12 1109
13 502
14 360
15 194
16 4073
17 2317
18 -221
20 0
21 16
22 106
29 105
30 4189
31 171
32 42
我想创建4个热编码变量,指示每行的哪个值在哪个四分位数上,将系列划分为4个四分位数 . 它会是这样的:
0 1787 Q1 Q2 Q3 Q4
1 4789 0 0 0 0
2 1350 0 0 0 1
3 1476 1 0 0 0
4 0 0 1 0 0
5 747 0 0 1 0
6 307 1 0 1 0
7 147 0 1 0 1
我知道这些数字并不完全匹配,这只是为了给出所需输出的可视化示例 .
我试过这个:
series.quantile[0.25, 0.5, 0.75, 1]
但这只会贬低这四个值:
0.25 67
0.50 442.5
0.75 1477.75
1.00 71188
我也试过这个:
series.apply(lambda x : series.quantile(x, 'lower'))
但是,这会产生以下错误:
ValueError: percentiles should all be in the interval [0, 1]. Try 17.87 instead
.
完成目标的最佳方法是什么?
非常感谢你提前
2 回答
以下代码以pandas.qcut和pandas.get_dummies为特色
结果
我想你可以尝试一下 .
应该给你这个: