2016-09-28 8 views
0

私は、パーセンタイルに基づいてデータセットの各列を分類する方法を考えています。例えば、カラムを考える:データセットの各フィーチャをPythonでパーセンタイルで分類する

ticket 
24160 
113781 
113781 
113781 
113781 
19952 
13502 
112050 
11769 

上記カラムの20パーセンタイルは基本的に、私はすべての値から、0-20thパーセンタイル= 1から全ての値カテゴリ変数にその列を変換する1350であります20〜40パーセンタイル= 2、40〜60パーセンタイルのすべての値= 3などである。したがって、チケット機能は1,2,3,4または5のカテゴリ変数になります。この変換を最後の列以外のデータセットのすべての列に適用したいと思います。これまでのところ私は、コード化されました:私は私のデータセット内の最後の列以外の各列にこの機能を適用する方法がわからない

import numpy as np 
    import pandas as pd 

    dataset = pd.read_csv('somedataset.csv') 
    def func(x): 
     if min(x)<=x< np.percentile(x, 20): 
     return 1 
     elif np.percentile(x, 20)<=x< np.percentile(x, 40): 
     return 2 
    elif np.percentile(x, 40)<=x< np.percentile(x, 60): 
     return 3 
    elif np.percentile(x, 60)<=x< np.percentile(x, 80): 
     return 4 
    elif x = max(x): 
     return 5 
    dataset[:]= dataset[:].apply(func) 

。私はどんなフィードバックにも大いに感謝します!

答えて

1
np.floor(df[df.columns[:-1]].rank()/len(df)/.2).astype(int) + 1 

上記のコードは元のデータと同じ列名で、必要なものを返します。

  1. df[df.columns[:-1]]サブセットすべてが、あなたは
  2. .rank()要求として最後の列は、あなたの
  3. np.floor(...).astype(int) + 1のようにあなたにバケツを与えるパーセンタイルバケットを与える最小から最大
  4. / len(df)/.2へのアイテムの整数ランクを与えます1から始まる整数
関連する問題