den*_*den 5 python dataframe pandas
我已经将客户 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
Run Code Online (Sandbox Code Playgroud)
我想要的结果是根据排名附加列名:
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
Run Code Online (Sandbox Code Playgroud)
我查了一些线索,但我能找到的最接近的东西是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'))
Run Code Online (Sandbox Code Playgroud)
细节:
使用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]])
Run Code Online (Sandbox Code Playgroud)
从沿索引(即)获取的r数据帧的列创建一个新的数据帧,然后使用以下命令连接数据帧:dfidf.columns[i]DataFrame.joinrdf
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |