我有一个包含客户建议的数据透视图,如下所示:

python - 从数据透视表重塑/转换Pandas数据框-LMLPHP

我想重塑此数据框或形成另一个新数据框,其中包含CustomerID列和4个新的附加列,分别称为“ Recommendation#1”,“ Recommendation#2”,“ Recommendation#3”和“ Recommendation#4”,其中每列将具有每个客户得分最高的4个项目。我试图使它看起来像这样:

python - 从数据透视表重塑/转换Pandas数据框-LMLPHP

但是,我对如何在python中实现此目的,从枢轴数据帧中获取所需数据帧感到迷茫。任何有关如何解决此问题的帮助或建议,将不胜感激!

最佳答案

您可以使用argsort并在每行中保留最高的n元素:

n=4
data = df.values.argsort().T[::-1].T[:,:n]


然后从获得的数组和您指定的列中构建一个数据框:

columns = ['Recommendation#{}'.format(i) for i in range(1,data.shape[1]+1)]
df = pd.DataFrame(df.columns[data], columns=columns, index = df.index)
print(df)

         Recommendation#1 Recommendation#2 Recommendation#3 Recommendation#4
ID1            Item4            Item2            Item8            Item6
ID2            Item5            Item1            Item4            Item6
ID3            Item7            Item6            Item8            Item3

关于python - 从数据透视表重塑/转换Pandas数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53634112/

10-12 17:01
查看更多