2015-12-14 170 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