df
Boat Arrival %Bulk PreSales
NML 20/3/21 100 50
ABC 18/3/21 100 100
OPQ 19/3/21 100 100
TSA 20/3/21 90 10
DEF 18/3/21 100 90
FED 19/3/21 50 50
RST 19/3/21 100 90
LMN 18/3/21 50 95
CBA 19/3/21 50 80
QPO 20/3/21 90 100
上述数据帧包含以百分比显示的散装和非散装货物的船上货物数据。最后,单元已经预售。
输出应该根据以下标准创建一个排名。第一个标准是到达日期。在日期相同的情况下,第二个订单优先级为%批量,最后第三个订单优先级是预售数量。这个想法是决定先取哪种商品。
所需输出:
Boat Arrival %Bulk PreSales RANK
ABC 18/3/21 100 100 1
DEF 18/3/21 100 90 2
LMN 18/3/21 50 95 3
OPQ 19/3/21 100 100 4
RST 19/3/21 100 90 5
CBA 19/3/21 50 80 6
FED 19/3/21 50 50 7
NML 20/3/21 100 50 8
QPO 20/3/21 90 100 9
TSA 20/3/21 90 10 10
此解决方案没有得到所需的结果。
df['RANK'] = df.sort_values(['Arrival', '%Bulk', 'PreSales'])['Arrival'].index + 1
您在正确的行上。我认为诀窍是使用自定义的sort_values()
,到货应在asc
订单中,%批量和预购应在desc
订单中。
# Sort your values correctly
df.sort_values(['Arrival', '%Bulk', 'PreSales'],ascending=[True,False,False],inplace=True)
# Reset your index
df.reset_index(drop=True,inplace=True)
# Create your ranking
df['RANK'] = df.index+1
将返回您想要的输出:
df
Boat Arrival %Bulk PreSales RANK
0 ABC 18/03/2021 100 100 1
1 DEF 18/03/2021 100 90 2
2 LMN 18/03/2021 50 95 3
3 OPQ 19/03/2021 100 100 4
4 RST 19/03/2021 100 90 5
5 CBA 19/03/2021 50 80 6
6 FED 19/03/2021 50 50 7
7 NML 20/03/2021 100 50 8
8 QPO 20/03/2021 90 100 9
9 TSA 20/03/2021 90 10 10