我将“客户ID”与他们最常购买的演出类型联系起来:
Genre Jazz Dance Music Theatre
Customer
100000000001 0 3 1 2
100000000002 0 1 6 2
100000000003 0 3 13 4
100000000004 0 5 4 1
100000000005 1 10 16 14
我想要的结果是根据排名添加列名:
Genre Jazz Dance Music Theatre Rank1 Rank2 Rank3 Rank4
Customer
100000000001 0 3 1 2 Dance Theatre Music Jazz
100000000002 0 1 6 2 Music Theatre Dance Jazz
100000000003 0 3 13 4 Music Theatre Dance Jazz
100000000004 0 5 4 1 Dance Music Theatre Jazz
100000000005 1 10 16 14 Music Theatre Dance Jazz
我已经查找了一些线程,但是我能找到的最接近的线程是idxmax
。但是,那只能给我Rank1
。
谁能帮助我获得所需的结果?
非常感谢!
丹尼斯
用:
i = np.argsort(df.to_numpy() * -1, axis=1)
r = pd.DataFrame(df.columns[i], index=df.index, columns=range(1, i.shape[1] + 1))
df = df.join(r.add_prefix('Rank'))
细节:
使用np.argsort
沿着axis=1
拿到指标i
,将按照从大到小的顺序排列流派。
print(i)
array([[1, 3, 2, 0],
[2, 3, 1, 0],
[2, 3, 1, 0],
[1, 2, 3, 0],
[2, 3, 1, 0]])
r
从df
沿索引i
(即df.columns[i]
)获取的数据框的列中创建一个新的数据框,然后使用DataFrame.join
将数据框r
与结合df
:
print(df)
Jazz Dance Music Theatre Rank1 Rank2 Rank3 Rank4
Customer
100000000001 0 3 1 2 Dance Theatre Music Jazz
100000000002 0 1 6 2 Music Theatre Dance Jazz
100000000003 0 3 13 4 Music Theatre Dance Jazz
100000000004 0 5 4 1 Dance Music Theatre Jazz
100000000005 1 10 16 14 Music Theatre Dance Jazz
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句