熊猫根据分组标准创建排名



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

最新更新