Python 2.7-计算每行的分位数

Python 2.7-计算每行的分位数,python,pandas,python-2.7,statistics,series,Python,Pandas,Python 2.7,Statistics,Series,我有这样一个熊猫系列: 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

我有这样一个熊猫系列:

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
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
我想创建4个一个热编码变量,指示每行的哪个值在哪个四分位数上,将序列划分为4个四分位数。应该是这样的:

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
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]
series.apply(lambda x : series.quantile(x, 'lower'))
但这只呼喊了这四个值:

0.25         67
0.50      442.5
0.75    1477.75
1.00      71188
我也试过:

series.quantile[0.25, 0.5, 0.75, 1]
series.apply(lambda x : series.quantile(x, 'lower'))
但是,这会产生以下错误:

ValueError:百分位数都应该在区间[0,1]内。请改用17.87

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


事先非常感谢

我想你可以试试这个

  • 使用序列创建数据帧


  • 使用分位数数据(包括0)创建第二个df


  • 使用此for循环创建Q列


    下面的代码显示了和应该执行的操作

    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  Q4
    0     1787   0   0   0   1
    1     4789   0   0   0   1
    2     1350   0   0   1   0
    3     1476   0   0   0   1
    4        0   1   0   0   0
    5      747   0   0   1   0
    6      307   0   0   1   0
    7      147   0   1   0   0
    8      221   0   1   0   0
    9      -88   1   0   0   0
    10    9374   0   0   0   1
    11     264   0   1   0   0
    12    1109   0   0   1   0
    13     502   0   0   1   0
    14     360   0   0   1   0
    15     194   0   1   0   0
    16    4073   0   0   0   1
    17    2317   0   0   0   1
    18    -221   1   0   0   0
    20       0   1   0   0   0
    21      16   1   0   0   0
    22     106   0   1   0   0
    29     105   1   0   0   0
    30    4189   0   0   0   1
    31     171   0   1   0   0
    32      42   1   0   0   0
    

    嗨,乔治,非常感谢你的回答。然而,这行中有一个sintax错误:
    quant=quant+1 df.loc[:,Q]=np.where((df.Series>quantiles.quantiles[quant-1])&(df.Series@Miguel2488)你能发布错误吗?你把pandas作为pd导入了吗?把numpy作为np导入了吗?可能是我用大写字母“S”(Series)调用了你的序列你把它作为一个系列吗?通常,小的更改会导致大的问题。如果你修复了它,请告诉我。@Miguel2488错误来自我使用python 3,而你使用python 2.7(我的错误)。用df[Q]Hi@ayorgo更改df.loc[:,Q]。谢谢你的回答!!这正是我想要的!!再次感谢!!:)