将pandas dataframe的double group打印为2D数组

bsu*_*ire 5 python pandas

我想在表中显示2分组依据的单个值聚合的结果。

这样的

df.groupby(['colA', 'colB']).size
Run Code Online (Sandbox Code Playgroud)

将产生:

   B1  B2  B3  B4 
A1 s11 s12 s13 ..
A2 s21 s22 s23 ..
A3 s31 s32 s33 ..
A4 ..  ..  ..  s44
Run Code Online (Sandbox Code Playgroud)

快速简便的方法是什么?

编辑:这是一个例子。我拥有所有用户的登录名,并且我想显示每个用户和一天的登录数(=行)

Day,User
1,John
1,John
1,Ben
1,Sarah
2,Ben
2,Sarah
2,Sarah
Run Code Online (Sandbox Code Playgroud)

应该产生:

D\U John  Ben  Sarah
1   2     1    1
2   0     1    2
Run Code Online (Sandbox Code Playgroud)

Jul*_*rec 6

使用:

df.groupby(['colA', 'colB']).size().unstack()
Run Code Online (Sandbox Code Playgroud)

例:

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
Run Code Online (Sandbox Code Playgroud)

现在:

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
Run Code Online (Sandbox Code Playgroud)

现在更新您的帖子中包含数据:

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
Run Code Online (Sandbox Code Playgroud)