gpt4 book ai didi

python - pandas:使用索引中的唯一值对矩阵进行分组和转置并填充空值

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:03 24 4
gpt4 key购买 nike

假设数据框的以下导入

from io import StringIO
import pandas as pd

datastring = StringIO("""\
userId skill rating
user1 A 1
user1 B 2
user1 C 3
user2 A 3
user2 C 2
user2 D 1
""")
df = pd.read_table(datastring, sep='\s\s+', engine='python')
df.sort_values(by='skill', inplace=True)
df.set_index(['skill', 'userId'], inplace=True)

这给了我一个这种形式的数据集:

dataset

我想转换/转置数据集,以便独特的用户形成一行,独特的技能形成列。每当用户不具备特定技能时,评分应设置为 0。

生成的数据集应该是这样的

       A  B  C  D
user1 1 2 3 0
user2 3 0 2 1

如何使用 pandas 库将其存档?

最佳答案

你需要DataFrame.unstack通过第一级 MultiIndex (0) 和 fill_valueNaN 替换为 0 :

print (df.unstack(0, fill_value=0)['rating'])

skill A B C D
userId
user1 1 2 3 0
user2 3 0 2 1

另一个类似的解决方案是使用 DataFrame.squeeze将 1 列 DataFrame 转换为 Series:

print (df.squeeze().unstack(0, fill_value=0))
skill A B C D
userId
user1 1 2 3 0
user2 3 0 2 1

print (df['rating'].unstack(0, fill_value=0))
skill A B C D
userId
user1 1 2 3 0
user2 3 0 2 1

最后,如果需要删除列名,请使用 rename_axis :

print (df['rating'].unstack(0, fill_value=0).rename_axis(None, axis=1))
A B C D
userId
user1 1 2 3 0
user2 3 0 2 1

关于python - pandas:使用索引中的唯一值对矩阵进行分组和转置并填充空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41459652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com