2016-11-22 26 views
2

のは、私がデータフレームを持っているとしましょう:列変数の複数の値の頻度を表示するpandasクロス集計でクロス集計を取得する方法は?

df = pd.DataFrame(np.random.randint(0,5, size=(5,6)), columns=list('ABCDEF')) 
pd.crosstab

クロッシング変数十分に単純です:

table = pd.crosstab(index=df['A'], columns=df['B']) 

利回り:私は、たとえば、このようなテーブルを望む

B 1 2 3 4 
A    
0 1 0 0 0 
1 0 0 0 1 
2 0 1 1 0 
3 0 1 0 0 

B (1+2+3) 1 2 3 4 
A    
0  1 1 0 0 0 
1  0 0 0 0 1 
2  2 0 1 1 0 
3  1 0 1 0 0 

誰も私をここに正しい軌道に乗せることができますか?

+1

持っていたことには良い答えがあります。しかし、私は欲しいものを理解するのに苦労しています。あなたの例を単純化し、あなたが見たいものを見せてください。つまり、自分のロジックを見ることができるように、自分で自分自身を手動で計算する必要があります。 – piRSquared

+0

私は自分の質問を更新しました。 – pasitrauk

答えて

2

sumをサブセットで使用しますが、小さなランダムdfを使用すると問題が発生する可能性があります。したがって、常に別の値を取得するため、列の値が異なります。 np.random.seed(100)を使用すると、私の答えと同じテスト出力が得られます。

table['(1+2+3)'] = table[[1,2,3]].sum(axis=1) 

サンプル:

np.random.seed(100) 
df = pd.DataFrame(np.random.randint(0,5, size=(5,6)), columns=list('ABCDEF')) 
table = pd.crosstab(index=df['A'], columns=df['B']) 
table['(1+2+3)'] = table[[1,2,3]].sum(axis=1) 
print (table) 
B 0 1 2 3 4 (1+2+3) 
A       
0 1 0 0 0 1  0 
1 0 0 0 1 0  1 
2 0 0 1 0 0  1 
3 0 1 0 0 0  1 
+0

ありがとう、ちょうど私が探していたもの! – pasitrauk

関連する問題