加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas按多列排名

发布时间:2020-12-20 12:33:51 所属栏目:Python 来源:网络整理
导读:我试图根据两列对大熊猫数据框进行排名. 我可以根据一列对其进行排名,但如何根据两列对其进行排名? ‘SaleCount’,然后’TotalRevenue’? import pandas as pddf = pd.DataFrame({'TotalRevenue':[300,9000,1000,750,500,2000,600,50,500],'Date':['2016-1
我试图根据两列对大熊猫数据框进行排名.
我可以根据一列对其进行排名,但如何根据两列对其进行排名? ‘SaleCount’,然后’TotalRevenue’?

import pandas as pd

df = pd.DataFrame({'TotalRevenue':[300,9000,1000,750,500,2000,600,50,500],'Date':['2016-12-02' for i in range(10)],'SaleCount':[10,100,30,35,20,2,20],'shops':['S3','S2','S1','S5','S4','S8','S6','S7','S9','S10']})

df['Rank'] = df.SaleCount.rank(method='dense',ascending = False).astype(int)

#df['Rank'] = df.TotalRevenue.rank(method='dense',ascending = False).astype(int)
df.sort_values(['Rank'],inplace=True)

print(df)

电流输出:

Date        SaleCount   TotalRevenue    shops   Rank
1   2016-12-02  100          9000            S2      1
5   2016-12-06  100          2000            S8      1
3   2016-12-04  35           750             S5      2
2   2016-12-03  30           1000            S1      3
7   2016-12-08  30           600             S7      3
9   2016-12-10  20           500             S10     4
4   2016-12-05  20           500             S4      4
0   2016-12-01  10           300             S3      5
8   2016-12-09  2            50              S9      6
6   2016-12-07  0            0               S6      7

我正在尝试生成这样的输出:

Date        SaleCount   TotalRevenue    shops   Rank
1   2016-12-02  100          9000            S2      1
5   2016-12-02  100          2000            S8      2
3   2016-12-02  35           750             S5      3
2   2016-12-02  30           1000            S1      4
7   2016-12-02  30           600             S7      5
9   2016-12-02  20           500             S10     6
4   2016-12-02  20           500             S4      6
0   2016-12-02  10           300             S3      7
8   2016-12-02  2            50              S9      8
6   2016-12-02  0            0               S6      9

解决方法

另一种方法是将两个感兴趣的列类型转换为str,并通过连接它们来组合它们.将它们转换回数值,以便根据它们的大小区分它们.

在方法=密集中,重复值的等级将保持不变. (这里:6)

由于您希望按降序对这些进行排名,因此在Series.rank()中指定ascending = False可以实现所需的结果.

col1 = df["SaleCount"].astype(str) 
col2 = df["TotalRevenue"].astype(str)
df['Rank'] = (col1+col2).astype(int).rank(method='dense',ascending=False).astype(int)
df.sort_values('Rank')

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读