2015-12-14 174 views
2

我想按升序排列基于数列的数据。
请参阅数据帧下面我的工作:熊猫根据多列排名

{'FACILITY': ['AAA', 'AAA', 'AAA', 'AAA', 'AAA'], 
'IN_DATE': 
['2015-08-30 05:49:05', 
    '2015-08-30 05:49:05', 
    '2015-08-30 05:49:05', 
    '2015-08-30 05:49:05', 
    '2015-09-02 20:56:59'], 
'LOT': 
['N123456', 'N654321', 'N654321', 'N123456', 'N123456'], 
'OPERATION': 
['100', '100', '100', '100', '100'], 
'TXN_DATE': 
['2015-08-30 06:04:03', 
    '2015-08-30 05:59:57', 
    '2015-08-30 06:37:32', 
    '2015-08-30 06:30:01', 
    '2015-09-02 21:39:44'] 

我想基于很多,操作的基础上TXN_DATE升序内以创建新的列“ORDER”。

回答

2

你可以得到使用排序方法的排序顺序:

In [11]: df 
Out[11]: 
    FACILITY    IN_DATE  LOT OPERATION    TXN_DATE 
0  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 06:04:03 
1  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 05:59:57 
2  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 06:37:32 
3  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 06:30:01 
4  AAA 2015-09-02 20:56:59 N123456  100 2015-09-02 21:39:44 

In [12]: df["TXN_DATE"].rank() 
Out[12]: 
0 2 
1 1 
2 4 
3 3 
4 5 
Name: TXN_DATE, dtype: float64 

其列:

In [13]: df["ORDER"] = df["TXN_DATE"].rank() 

In [14]: df 
Out[14]: 
    FACILITY    IN_DATE  LOT OPERATION    TXN_DATE ORDER 
0  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 06:04:03  2 
1  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 05:59:57  1 
2  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 06:37:32  4 
3  AAA 2015-08-30 05:49:05 N123456  100 2015-08-30 06:30:01  3 
4  AAA 2015-09-02 20:56:59 N123456  100 2015-09-02 21:39:44  5 

排名也是系列GROUPBY方法:

In [15]: df.groupby(["LOT", "OPERATION"])["TXN_DATE"].rank() 
Out[15]: 
0 2 
1 1 
2 4 
3 3 
4 5 
Name: (N123456, 100), dtype: float64 

注意:在这个sma举例来说,这个名字来自唯一的组,通常这个名字不会有。

+0

谢谢Andy.This解决方案只能在同一批次和操作下工作。似乎不能按日期给出总体排名,并且不在批量和操作中。我可以改变数据集来显示我的意思 – Felix

+0

@Felix也有一个排名groupby方法。所以你希望TXN_DATE对每个LOT排名? –

+0

TXN_DATE每个LOT和OPERATION,因为同一批可能在不同的操作。谢谢你,安迪。 – Felix