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
实现我的目标最好的方法是什么
事先非常感谢我想你可以试试这个
下面的代码显示了和应该执行的操作
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]。谢谢你的回答!!这正是我想要的!!再次感谢!!:)