我可以根据一列对其进行排名,但如何根据两列对其进行排名? ‘SaleCount’,然后’TotalRevenue’?
import pandas as pddf = 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 Rank1 2016-12-02 100 9000 S2 15 2016-12-06 100 2000 S8 13 2016-12-04 35 750 S5 22 2016-12-03 30 1000 S1 37 2016-12-08 30 600 S7 39 2016-12-10 20 500 S10 44 2016-12-05 20 500 S4 40 2016-12-01 10 300 S3 58 2016-12-09 2 50 S9 66 2016-12-07 0 0 S6 7
我正在尝试生成这样的输出:
Date SaleCount TotalRevenue shops Rank1 2016-12-02 100 9000 S2 15 2016-12-02 100 2000 S8 23 2016-12-02 35 750 S5 32 2016-12-02 30 1000 S1 47 2016-12-02 30 600 S7 59 2016-12-02 20 500 S10 64 2016-12-02 20 500 S4 60 2016-12-02 10 300 S3 78 2016-12-02 2 50 S9 86 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')总结
以上是内存溢出为你收集整理的python – Pandas按多列排名全部内容,希望文章能够帮你解决python – Pandas按多列排名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)