2016-07-18 18 views
2

数値をクォンタイルでグループ化し、クォンタイルバンドに入る値の合計の列を作成しようとしています。ここでは単純化され、再現性の例です:パンダ:agg値を持つgroupby分位数

raw_data = {'female': [0, 1, 0, 1, 0, 1, 0, 1], 
     'male': [1, 0, 1, 0, 1, 0, 1, 0], 
     'number': [25000, 34000, 48600, 22000, 50000, 21000, 29000, 36000]} 
df = pd.DataFrame(raw_data, columns = ['female', 'male', 'number']) 
df 

    female male number 
    0 0  1  25000 
    1 1  0  34000 
    2 0  1  48600 
    3 1  0  22000 
    4 0  1  50000 
    5 1  0  21000 
    6 0  1  29000 
    7 1  0  36000 

は基本的に私はこれを達成しようとしています:

pd.DataFrame(df['number'].quantile([.1, .2, .3, .4, .5])) 

    number 
0.1 21700 
0.2 23200 
0.3 25400 
0.4 28200 
0.5 31500 

しかし、このデータフレームでは、2つの新しい列を表示します。数字が対応する分位帯に該当する男性の合計と女性の合計で1つです。

は当初、私はこれが追加さ .quantile([values])groupbyだろうと思ったし、その後 .agg({'male': 'sum', 'female':'sum'}) しかしこれは動作しません。私が達成しようとしていることさえできますか?あなたがグループを作成するために pd.qcutを使用したい

答えて

0

qs = pd.qcut(df.number, [0, .1, .2, .3, .4, .5, 1], ['q%d' % i for i in xrange(6)]) 
qs 

0 q2 
1 q5 
2 q5 
3 q1 
4 q5 
5 q0 
6 q4 
7 q5 
Name: number, dtype: category 
Categories (6, object): [q0 < q1 < q2 < q3 < q4 < q5] 

その後groupbyagg

df.groupby(qs).agg({'male': 'sum', 'female':'sum'}) 

enter image description here

+0

これは素晴らしいですが、「数を維持する方法があります'列だけでなく、私の最初のデータフレームごとに、分位数を観測することができます。 – RDJ

関連する問題