将每个值置于 Pandas 中的百分位
Placing every value in its percentile in Pandas
考虑一个具有以下百分位数的系列:
> df['col_1'].describe(percentiles=np.linspace(0, 1, 20))
count 13859.000000
mean 421.772842
std 14665.298998
min 1.201755
0% 1.201755
5.3% 1.430695
10.5% 1.438417
15.8% 1.466462
21.1% 1.473050
26.3% 1.500834
31.6% 1.512218
36.8% 1.542935
42.1% 1.579845
47.4% 1.647162
50% 1.690612
52.6% 1.749047
57.9% 1.955589
63.2% 2.344475
68.4% 3.075641
73.7% 4.466094
78.9% 8.410964
84.2% 14.998738
89.5% 41.363612
94.7% 162.865079
100% 1511013.790233
max 1511013.790233
Name: col_1, dtype: float64
我想得到另一列 col_2
,其中包含在上述计算中每行分配给的百分位数。
我如何在 Pandas 中做到这一点?
df2 = pd.DataFrame(range(1000))
df2.columns = ['a1']
df2['percentile'] = pd.qcut(df2.a1,100, labels=False)
或省略标签以查看范围
请注意,在 Python 3 中,对于 Pandas 0.16.2(截至今天的最新版本),您需要使用 list(range(1000))
而不是 range(1000)
以上工作。
考虑一个具有以下百分位数的系列:
> df['col_1'].describe(percentiles=np.linspace(0, 1, 20))
count 13859.000000
mean 421.772842
std 14665.298998
min 1.201755
0% 1.201755
5.3% 1.430695
10.5% 1.438417
15.8% 1.466462
21.1% 1.473050
26.3% 1.500834
31.6% 1.512218
36.8% 1.542935
42.1% 1.579845
47.4% 1.647162
50% 1.690612
52.6% 1.749047
57.9% 1.955589
63.2% 2.344475
68.4% 3.075641
73.7% 4.466094
78.9% 8.410964
84.2% 14.998738
89.5% 41.363612
94.7% 162.865079
100% 1511013.790233
max 1511013.790233
Name: col_1, dtype: float64
我想得到另一列 col_2
,其中包含在上述计算中每行分配给的百分位数。
我如何在 Pandas 中做到这一点?
df2 = pd.DataFrame(range(1000))
df2.columns = ['a1']
df2['percentile'] = pd.qcut(df2.a1,100, labels=False)
或省略标签以查看范围
请注意,在 Python 3 中,对于 Pandas 0.16.2(截至今天的最新版本),您需要使用 list(range(1000))
而不是 range(1000)
以上工作。