熊猫数据框按多列排序(组合键)

时间:2018-08-04 00:56:57

标签: python pandas dataframe rank

是否存在通过组合键对下面描述的数据帧进行排序的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

1 个答案:

答案 0 :(得分:2)

在您的左边原因是返回3列,因此您必须将后面的两列分配给3列而不是

for x in cols:
    df[x + 'rank'] = df[x].rank(method='dense')