如何为 pandas 交叉表设置值?

发布于 2025-01-13 01:10:11 字数 1557 浏览 2 评论 0原文

我刚刚学习 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'])

数据框的输出

现在在 df 上应用交叉表:

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

我得到: 交叉表的输出

但是,这不是我所期望的。

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

Music_id123
Name
Alice250
Bob050
Cameron001

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

I am just learning pandas, I do not know even possible to set values to a crosstab.
For example:
My data frame is:

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

Now apply crosstab on df:

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

I got:
The output of crosstab

However, that is not what I expected.

I want it shows somehow like this:

Music_id123
Name
Alice250
Bob050
Cameron001

Basically, I want it instead of counting how many times the Name matches Music_id, it gives the relative value from the third column (Music_type). Did I use the right function to do that? Any advice is appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千と千尋 2025-01-20 01:10:11

您可以尝试以下解决方案来解决:

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

You can try this solutions to resolve :

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文