Python 2.7 - 计算每行的分位数

我有一个像这样的熊猫系列:


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 个 one 热编码变量,指示每行哪个值位于哪个四分位数,将系列分成 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.


实现我的目标的最佳方法是什么?


非常感谢您提前


MYYA
浏览 145回答 2
2回答

炎炎设计

以下代码以pandas.qcut和pandas.get_dummies为特色应该做quantiles = pd.qcut(series,                    [0, 0.25, 0.5, 0.75, 1],                    labels=['Q1', 'Q2', 'Q3', 'Q4'])dummies = pd.get_dummies(quantiles)pd.concat([df, dummies], axis=1)导致    Series  Q1  Q2  Q3  Q40     1787   0   0   0   11     4789   0   0   0   12     1350   0   0   1   03     1476   0   0   0   14        0   1   0   0   05      747   0   0   1   06      307   0   0   1   07      147   0   1   0   08      221   0   1   0   09      -88   1   0   0   010    9374   0   0   0   111     264   0   1   0   012    1109   0   0   1   013     502   0   0   1   014     360   0   0   1   015     194   0   1   0   016    4073   0   0   0   117    2317   0   0   0   118    -221   1   0   0   020       0   1   0   0   021      16   1   0   0   022     106   0   1   0   029     105   1   0   0   030    4189   0   0   0   131     171   0   1   0   032      42   1   0   0   0

忽然笑

我想你可以试试这个。使用系列创建数据框df = pd.DataFrame({'Series': series})使用分位数数据(包括 0)创建第二个 dfquantiles = df['Series'].quantile([0, 0.25, 0.5, 0.75, 1]).to_frame('quantiles').reset_index(drop = True)使用此 for 循环创建 Q 列。for quant, Q in enumerate(['Q1', 'Q2', 'Q3', 'Q4']):&nbsp; &nbsp; quant = quant + 1&nbsp; &nbsp; df.loc[:,Q] = np.where((df.Series > quantiles.quantiles[quant-1]) & (df.Series <= quantiles.quantiles[quant]), 1, 0)这应该给你这个:Series&nbsp; Q1&nbsp; Q2&nbsp; Q3&nbsp; Q40&nbsp; &nbsp;1787&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;11&nbsp; &nbsp;4789&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;12&nbsp; &nbsp;1350&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;03&nbsp; &nbsp;1476&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;14&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;05&nbsp; &nbsp;747 0&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;06&nbsp; &nbsp;307 0&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;07&nbsp; &nbsp;147 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;08&nbsp; &nbsp;221 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;09&nbsp; &nbsp;-88 1&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;010&nbsp; 9374&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;111&nbsp; 264 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;012&nbsp; 1109&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;013&nbsp; 502 0&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;014&nbsp; 360 0&nbsp; &nbsp;0&nbsp; &nbsp;1&nbsp; &nbsp;015&nbsp; 194 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;016&nbsp; 4073&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;117&nbsp; 2317&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;118&nbsp; -221&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;019&nbsp; 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;020&nbsp; 16&nbsp; 1&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;021&nbsp; 106 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;022&nbsp; 105 1&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;023&nbsp; 4189&nbsp; &nbsp; 0&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;124&nbsp; 171 0&nbsp; &nbsp;1&nbsp; &nbsp;0&nbsp; &nbsp;025&nbsp; 42&nbsp; 1&nbsp; &nbsp;0&nbsp; &nbsp;0&nbsp; &nbsp;0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python