我试图根据两列对pandas数据帧进行排序。 我可以根据一个列对它进行排名,但如何根据两个列对它进行排名呢?”SaleCount,然后是TotalRevenue?
import pandas as pd
df = pd.DataFrame({'TotalRevenue':[300,9000,1000,750,500,2000,0,600,50,500],
'Date':['2016-12-02' for i in range(10)],
'SaleCount':[10,100,30,35,20,100,0,30,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
,并通过连接它们来组合它们。将这些值转换回数值,以便根据其大小区分它们。在
method=dense
中,重复值的列组将保持不变。(此处:6)由于您希望按降序排列,所以在^{} 中指定
ascending=False
可以获得所需的结果。pd.factorize
将为iterable的每个唯一元素生成唯一值。我们只需要按照我们想要的顺序排序,然后进行因子分解。为了实现多列,我们将排序后的结果转换为元组。这样做的一般方法是将所需的fiel分组为一个元组,不管类型是什么。
相关问题 更多 >
编程相关推荐