Python 2.7 - 计算每行的分位数

标签 python pandas python-2.7 statistics series

我有一个像这样的 Pandas 系列:

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:百分位数应全部位于区间 [0, 1] 内。尝试改为 17.87

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

提前非常感谢

最佳答案

以下代码包含 pandas.qcutpandas.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  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

关于Python 2.7 - 计算每行的分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692659/

相关文章:

python - 这是将实时数据记录到数据库中的合乎逻辑的方法吗?

python - scikit-learn CountVectorizer 中的类型错误

python - 在 pandas df 中查找列组合的计数

Python Pandas 动态创建数据框

python - 数据库错误 : ORA-01036: illegal variable name/number

python - Pandas:根据字典中存在的值保留列值,并将其他列设为空白

python - 如何在 ubuntu 10.04 中卸载 python 2.6.5 并安装最新版本(2.7.3)

python - Python 中的代码未完成执行

python - 与列标题对应的引用 DataFrame 值

python-2.7 - SSLv3 与 Python 中的 ssl 库的连接