2016-11-18 7 views
2

2つのgroup byの値を1つの値にした結果をテーブルに表示したいとします。pandasデータフレームによる二重グループの印刷を二次元配列として

df.groupby(['colA', 'colB']).size 

がもたらすであろうことを、このような

B1 B2 B3 B4 
A1 s11 s12 s13 .. 
A2 s21 s22 s23 .. 
A3 s31 s32 s33 .. 
A4 .. .. .. s44 

これを行うための迅速かつ簡単な方法何を?

編集:ここに例があります。私は、すべてのユーザーのログインを持っている、と私は、ユーザごとにログインの数(=行)を表示すると日

Day,User 
1,John 
1,John 
1,Ben 
1,Sarah 
2,Ben 
2,Sarah 
2,Sarah 

得られるはず:

D\U John Ben Sarah 
1 2  1 1 
2 0  1 2 

答えて

3

を使用:

df.groupby(['colA', 'colB']).size().unstack() 

例:今すぐ

df = pd.DataFrame(np.transpose([np.random.choice(['B1','B2','B3'], size=10), 
          np.random.choice(['A1','A2','A3'], size=10)]), 
      columns=['A','B']) 

df 

    A B 
0 B3 A1 
1 B1 A2 
2 B3 A3 
3 B1 A3 
4 B2 A2 
5 B3 A3 
6 B3 A1 
7 B2 A1 
8 B1 A3 
9 B3 A3 

df.groupby(['A','B']).size().unstack() 

B A1 A2 A3 
A   
B1 NaN  1.0  2.0 
B2 1.0  1.0  NaN 
B3 2.0  NaN  3.0 

更新する今、あなたのポストは、データがあること:

df.groupby(['Day','User']).size().unstack().fillna(0) 

User Ben John Sarah 
Day     
1  1.0 2.0 1.0 
2  1.0 0.0 2.0 
+1

そのシンプル。大好きです。ありがとう – bsuire