2 回答
TA贡献1808条经验 获得超4个赞
以下代码以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 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
TA贡献1806条经验 获得超5个赞
我想你可以试试这个。
使用系列创建数据框
df = pd.DataFrame({'Series': series})
使用分位数数据(包括 0)创建第二个 df
quantiles = 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']):
quant = quant + 1
df.loc[:,Q] = np.where((df.Series > quantiles.quantiles[quant-1]) & (df.Series <= quantiles.quantiles[quant]), 1, 0)
这应该给你这个:
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 0 0 0 0
19 0 1 0 0 0
20 16 1 0 0 0
21 106 0 1 0 0
22 105 1 0 0 0
23 4189 0 0 0 1
24 171 0 1 0 0
25 42 1 0 0 0
添加回答
举报