如何将值设置为 pandas 交叉表?

How to set value to pandas crosstab?

我只是在学习 pandas,我什至不知道可以为交叉表设置值。 例如: 我的数据框是:

data = [['Alice', 1, 2], ['Bob', 2, 5], ['Cameron', 3, 1],['Alice', 2, 5],['Bob', 3, 1]]
df = pd.DataFrame(data, columns = ['Name', 'Music_id', 'Music_type'])

The output of the data frame

现在在 df 上应用交叉表:

ct = pd.crosstab([df.Name,df.Music_id],df.Music_type)

我得到: The output of crosstab

然而,这不是我所期望的。

我希望它以某种方式显示:

Music_id 1 2 3
Name
Alice 2 5 0
Bob 0 5 0
Cameron 0 0 1

基本上,我想要它而不是计算名称匹配 Music_id 的次数,而是给出第三列 (Music_type) 的相对值。我是否使用了正确的功能来做到这一点?任何建议表示赞赏!

您可以试试这个解决方案来解决:

pd.crosstab

pd.crosstab(df['Name'], columns = df['Music_id'], values = df['Music_type'], aggfunc = 'first').fillna(0)

# Output :
# Music_id    1    2    3
# Name
# Alice     2.0  5.0  0.0
# Bob       0.0  5.0  1.0
# Cameron   0.0  0.0  1.0

df.pivot

df.pivot(index = 'Name', columns = 'Music_id')['Music_type'].fillna(0)
# Output :
# Music_id    1    2    3
# Name
# Alice     2.0  5.0  0.0
# Bob       0.0  5.0  1.0
# Cameron   0.0  0.0  1.0