【发布时间】:2018-08-04 00:56:56
【问题描述】:
有没有一种 Python 的方法可以通过组合键对下面描述的数据帧进行排序 - 首先是 ORD_DT_KEY,然后是 ORD_TM_KEY,然后是 ORD_KEY;并将排名存储在另一列 ORD_RANK 中?
下面的代码不起作用,因为它创建了 3 个单独的等级,并在我尝试将其分配给单个列时引发错误。
import pandas as pd
#Read orders data stored in a pipe delimeted file
df_raw_orders = pd.read_table("Dummy_order_data.txt", delimiter="|")
print df_raw_orders.head()
df_sorted_orders = df_raw_orders
cols = ['ORD_DT_KEY','ORD_TM_KEY','ORD_KEY']
df_sorted_orders['ORD_RANK'] = df_sorted_orders[cols].rank(method='dense')
输入数据,Dummy_order_data.txt,如下:
ORD_KEY|ORD_DT_KEY|ORD_TM_KEY|QTY|SKU_KEY
10001|1|0|1|1
10001|1|0|1|2
10001|1|0|1|3
10002|2|0|1|1
10002|2|0|1|3
10003|3|0|1|4
10004|4|0|1|4
10004|4|0|1|5
10005|5|0|1|1
10006|6|0|1|1
10006|6|0|1|4
10007|7|0|1|3
10007|7|0|1|4
10008|8|0|1|5
10009|9|0|1|1
10009|9|0|1|4
10009|9|0|1|5
10010|10|0|2|1
10010|10|0|2|2
10010|10|0|2|3
10011|11|0|1|1
10011|11|0|1|3
10012|12|0|1|4
10012|12|0|1|5
10013|13|0|1|1
10014|14|0|2|1
10014|14|0|2|4
需要的输出:
ORD_KEY ORD_DT_KEY ORD_TM_KEY SKU_KEY QTY ORD_RANK
10001 1 0 1 1 1
10001 1 0 2 1 1
10001 1 0 3 1 1
10002 2 0 1 1 2
10002 2 0 3 1 2
10003 3 0 4 1 3
10004 4 0 4 1 4
10004 4 0 5 1 4
10005 5 0 1 1 5
10006 6 0 1 1 6
10006 6 0 4 1 6
10007 7 0 3 1 7
10007 7 0 4 1 7
10008 8 0 5 1 8
10009 9 0 1 1 9
10009 9 0 4 1 9
10009 9 0 5 1 9
10010 10 0 1 2 10
10010 10 0 2 2 10
10010 10 0 3 2 10
10011 11 0 1 1 11
10011 11 0 3 1 11
10012 12 0 4 1 12
10012 12 0 5 1 12
10013 13 0 1 1 13
10014 14 0 1 2 14
10014 14 0 4 2 14
【问题讨论】:
-
试试
print(df_sorted_orders[cols].rank(method='dense'))看看它返回了什么。 -
df_sorted_orders['ORD_RANK']表示您将收到一个系列。您正在传递一个数据框 -
是的,我看到了问题所在。我的目标是创建一个按这 3 列对数据进行排序的单一排名。我该如何修改它以获得那个输出?
标签: python pandas dataframe rank