获取Pandas Dataframe中列名称的排名

牙本质

我将“客户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

谁能帮助我获得所需的结果?

非常感谢!

丹尼斯

Shubham Sharma:

用:

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]])

rdf沿索引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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从列表更改Pandas Dataframe中的列名称

在pandas DataFrame中更改特定的列名称

如何使用名称列表更改pandas Dataframe中的列名称?

获取pandas DataFrame中某一行的最大值的列名称

Python Pandas中DataFrame中的列名称很难更改吗?

获取按名称在DataFrame中的值排序的列名

在Python Pandas DataFrame或Jupyter Notebook中包装列名称

如何基于Pandas python中的值获取多个列名称?

Pandas Dataframe:按列名称绘制颜色

从pandas数据框中获取包括索引名称在内的列名称

pandas dataframe-获取列名称的列表,其中单元格具有特定值

获取列的名称,并在dataframe pandas中从中创建数据

从python pandas中的列名获取列索引

在SheetJS中获取列名称的数组

在MySQL中获取表列名称?

在bean中获取p:dataTable列名称

如何获取列名称,结果为Pandas布尔归约中的True

是否可以按 Pandas-Python 中的列名称无序获取值?

Python Pandas:在每行中追加列名称

替换Pandas中的Tricky列名称

浮动为pandas中列名称的整数

如何获取pandas DataFrame中第二大行值的列名

获取非浮点列的DataFrame列名称的列表

从列Panda Dataframe获取最小数据并添加列名称

从DataFrame或JuliaDB表中获取列名

显示的列名称与Pandas中的词典键名称不同吗?

遍历Pandas Dataframe并返回列名称和类型

基于列名称条件的pandas dataframe列值总和

在 Pandas DataFrame 中交换和分组列名