在python中将列值分组为稀疏矩阵

Adi*_*rma 0 python dataframe python-3.x pandas

我有以下数据:

User    Group
user1   G1
user1   G2
user1   G3
user1   G7
user2   G10
user2   G4
user2   G7
user2   G1
user2   G13
user3   G16
user3   G5
user3   G6
user4   G2
user4   G13
user4   G15
user4   G10
Run Code Online (Sandbox Code Playgroud)

我想以以下格式准备相关数据:

       G1  G2 G3 G4 G5 G6 G7 G10 G13 G15 G16
user1  1   1  1  0  0  0  1  0   0   0   0  
user2  1   0  0  1  0  0  1  1   1   0   0
user3  0   0  0  0  1  1  0  0   1   0   1
user4  0   1  0  0  0  0  0  1   1   1   0
Run Code Online (Sandbox Code Playgroud)

我尝试分别调换每个用户,但这对我没有帮助。有什么办法可以完成这项工作,因为我有更大的数据。我知道它会创建一个解析矩阵,但这就是我想要创建的。

moz*_*way 5

作为对另一个答案的补充,您可以使用自然排序natsort

from natsort import natsorted
df2 = pd.crosstab(df['User'], df['Group'])
df2[natsorted(df2.columns)]
Run Code Online (Sandbox Code Playgroud)

输出:

Group  G1  G2  G3  G4  G5  G6  G7  G10  G13  G15  G16
User                                                 
user1   1   1   1   0   0   0   1    0    0    0    0
user2   1   0   0   1   0   0   1    1    1    0    0
user3   0   0   0   0   1   1   0    0    0    0    1
user4   0   1   0   0   0   0   0    1    1    1    0
Run Code Online (Sandbox Code Playgroud)