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) 由于您希望按降序对这些进行排名,因此在 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') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |