2013-03-04 139 views
3

我有以下數據集:返回在pandas中跳過nan值的排序索引?

PID,RUN_START_DATE,PUSHUP_START_DATE,SITUP_START_DATE,PULLUP_START_DATE 
1,2013-01-24,2013-01-02,,2013-02-03 
2,2013-01-30,2013-01-21,2013-01-13,2013-01-06 
3,2013-01-29,2013-01-28,2013-01-01,2013-01-29 
4,2013-02-16,2013-02-12,2013-01-04,2013-02-11 
5,2013-01-06,2013-02-07,2013-02-25,2013-02-12 
6,2013-01-26,2013-01-28,2013-02-12,2013-01-10 
7,2013-01-26,,2013-01-12,2013-01-30 
8,2013-01-03,2013-01-24,2013-01-19,2013-01-02 
9,2013-01-22,2013-01-13,2013-02-03, 
10,2013-02-06,2013-01-16,2013-02-07,2013-01-11 

我知道我可以使用numpy.argsort返回值的排序指標:

SQ_AL_INDX = numpy.argsort(df_sequence[['RUN_START_DATE', 'PUSHUP_START_DATE', 'SITUP_START_DATE', 'PULLUP_START_DATE']], axis=1) 

... ...回報

RUN_START_DATE PUSHUP_START_DATE SITUP_START_DATE PULLUP_START_DATE 
0    2     1     0     3 
1    3     2     1     0 
2    2     1     0     3 
3    2     3     1     0 
4    0     1     3     2 
5    3     0     1     2 
6    1     2     0     3 
7    3     0     2     1 
8    3     1     0     2 
9    3     1     0     2 

但是,它似乎把pandas.NaT值放入第一位置。因此,在此示例where PID == 1中,排序順序返回2 1 0 3。但是,第二個指數位置是pandas.Nat的值。

我怎樣才能得到分類指標,而跳過pandas.NaT值(例如,返回索引值將2 1 np.NaN 32 1 pandas.NaT 3或更好,但1 0 2PID 1,而不是2 1 0 3)?

回答

2

通過numpy.argsortapply方法,而不是直接使用它。這樣,NaN/NaT就會持續存在。例如:

In [2]: df_sequence[['RUN_START_DATE', 'PUSHUP_START_DATE', 'SITUP_START_DATE', 'PULLUP_START_DATE']].apply(numpy.argsort, axis=1) 
Out[2]: 
       RUN_START_DATE PUSHUP_START_DATE SITUP_START_DATE PULLUP_START_DATE 
0    1     0    NaN    2 
(etc.) 
+0

非常感謝您的幫助!當我運行代碼時,我得到了一些奇怪的結果,並在它們上面加上NaT。對於第0行,我得到以下內容:0 1970-01-01 00:00:00 1970-01-01 00:00:00 2262-04-10 0:12:43.145224 1970-01-01 00:00:00。第6行和第8行也是錯誤的。我已將我的代碼和全部結果放在pastebin中:http://pastebin.com/qhhZzRGr – BigHandsome 2013-03-04 20:31:51

+1

可以顯示df.dtypes和您的熊貓版本嗎?這應該工作在0.11,可能不會在0.10.1;嘗試使用當前的主設備,如果可以的話 – Jeff 2013-03-04 23:44:05

+0

@jeff,原始設備是datetime64 [ns],apply之後的返回索引是對象。我可以使用版本0.11.0.dev-3790f16。 – BigHandsome 2013-03-05 01:07:37