web-dev-qa-db-ja.com

Python、Pandasを使用して、サイズに基づいて別の変数をランク付けするためのDecileおよびQuintile列を作成する方法は?

トレーダーが投資した金額を表すInvestmentを含む列を持つデータフレームがあります。データフレームに2つの新しい列を作成します。 1つはInvestmentサイズに基づいて十分位ランクを与え、もう1つは五分位ランクを与えます。投資額が最大の十分位数を1で表し、最小値を10で表します。同様に、投資額が最大の五分位数を1に、最小額を5に表します。

私はパンダに慣れていないので、これを簡単に行う方法はありますか?ありがとう!

16
finstats

お探しの機能はpandas.qcuthttp://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
28
Dan Frank