如何使用Python,Pandas创建一个Decile和Quintile列来根据大小对另一个变量进行排名?

时间:2014-10-21 21:08:00

标签: python pandas ranking

我有一个数据框,其中包含Investment的列,表示交易者投入的金额。我想在数据框中创建2个新列;一个给出十分位数,另一个给出基于Investment大小的五分位数。我希望1代表具有最大投资的十分位数,10代表最小投资。 Smilarly,我希望1代表最大投资的五分之一,5代表最小投资。

我是熊猫新手,所以我有办法轻松做到这一点吗? 谢谢!

1 个答案:

答案 0 :(得分:19)

您要查找的功能位于pandas.qcut http://pandas.pydata.org/pandas-docs/stable/generated/pandas.qcut.html

In [51]: import numpy as np

In [52]: import pandas as pd

In [53]: investment_df = pd.DataFrame(np.arange(10), columns=['investment'])

In [54]: investment_df['decile'] = pd.qcut(investment_df['investment'], 10, labels=False)

In [55]: investment_df['quintile'] = pd.qcut(investment_df['investment'], 5, labels=False)

In [56]: investment_df
Out[56]: 
   investment  decile  quintile
0           0       0         0
1           1       1         0
2           2       2         1
3           3       3         1
4           4       4         2
5           5       5         2
6           6       6         3
7           7       7         3
8           8       8         4
9           9       9         4   

用最小的数字标记最大百分位数是非标准的,但你可以通过

来做到这一点。
In [60]: investment_df['quintile'] = pd.qcut(investment_df['investment'], 5, labels=np.arange(5, 0, -1))

In [61]: investment_df['decile'] = pd.qcut(investment_df['investment'], 10, labels=np.arange(10, 0, -1))

In [62]: investment_df
Out[62]: 
   investment decile quintile
0           0     10        5
1           1      9        5
2           2      8        4
3           3      7        4
4           4      6        3
5           5      5        3
6           6      4        2
7           7      3        2
8           8      2        1
9           9      1        1