2016-04-13 16 views
2

計算:GROUPBYのパンダは、次のように私は走った後、私はGROUPBYオブジェクトを持っている割合

grouped_mask=L2014_2.groupby(['state']) 
grouped_mask.mask.value_counts() 

state mask 
AL  False 105931 
     True   77 
AR  False  67788 
     True  1774 
AZ  False  90068 
     True  151 
CA  False 586184 
     True   4 
CO  False  75188 
     True  14360 
CT  False  78270 
     True   1 

を今私は、各状態での真の割合が何であるかを計算する必要があります。これを行う方法はありますか?

+0

:-)割合を取得するために、100でない掛けgroupby_mask.mask.value_counts()。groupby(レベル= 0).apply(ラムダx:x/x.sum()) 'は動作しますか?それは私に AL falseこの 状態マスクを与えるよう – EdChum

+0

は本当に、右のようではありませ1.00 真0.00 AR偽0.97 真0.03 AZ偽1.00 真0.00 CA偽1.00 真0.00 CO偽0.84 真0.16 CT False 1.00 True 0.00 – alice

+0

100を掛けた場合、有効数字を切り捨てるように見えますが、数字が増えますか? – EdChum

答えて

3

また、あなたは相対的な周波数を得るためにnormalizeパラメータを設定することができます。

grouped_mask.mask.value_counts(normalize=True) 

だけ

よろしく

1

あなたが最初のレベルでgroupbyをすることができ、その後の和に対する真/偽カウントを分割ラムダ適用:あなたが使用して高度なインデックスを使用することができるだけでFalseラベルを取得するために、上記をフィルタリングするには

In [20]: 
df.groupby(level=0).apply(lambda x: x/x.sum() * 100) 

Out[20]: 
       Count 
state mask    
AL False 99.927364 
     True 0.072636 
AR False 97.449757 
     True 2.550243 
AZ False 99.832629 
     True 0.167371 
CA False 99.999318 
     True 0.000682 
CO False 83.963908 
     True 16.036092 
CT False 99.998722 
     True 0.001278 

slice S:

In [33]: 
gp = df.groupby(level=0).apply(lambda x: x/x.sum() * 100) 
gp.loc(axis=0)[slice(None),False] 

Out[33]: 
       Count 
state mask    
AL False 99.927364 
AR False 97.449757 
AZ False 99.832629 
CA False 99.999318 
CO False 83.963908 
CT False 99.998722 
+0

この後にTrue値だけを取る方法は分かりますか?私は偽の値を望まないです – alice

+0

ここで 'gp'は上記の結果です:' 'gp.loc(軸= 0)[スライス(なし)、偽]'もアップヴォート – EdChum

+0

あなたは最高です!! – alice

0
gp=grouped_mask.mask.value_counts().groupby(level=0).apply(lambda x: 100*x/float(x.sum())) 

state mask 
AL  False 94.37 
     True  5.63 
AR  False 73.85 
     True  26.15 
AZ  False 91.88 
     True  8.12 
CA  False 99.57 
     True  0.43 
CO  False 64.66 
     True  35.34 
gp.sort_index(level=0) 
gp.loc(axis=0)[slice(None),False] 

KeyError例外:「マルチインデックススライスが完全lexsortedタプルLEN(2)において、Lであることがインデックスを必要としますexsort深さ(1)」

+0

レベル1もソートしています。それでも私はマルチインデックススライシングエラー – alice

+0

私はまた、KeyError – alice

+0

を言って、まだレベル= "状態"を使用してソートしましたので、本当に新しい質問に答える必要がありますまた、それは場所ではないので、並べ替えの結果を割り当てる必要があります – EdChum

関連する問題