2015-11-27 1 views
0

Пусть у меня есть ФР:Как вернуть N наибольших чисел для каждой строки в pd.Dataframe без оценки диагональных значений?

 c1 c2 c3 c4 c5 
c1 1 10 16 0.5 7 
c2 11 1  1.3 8  6 
c3 12 12 1 4  2 
c4 3 0.4 2 1  9  
c5 4 7  2 0.9 1 

Have я могу вернуть 3 высочайшие окрестности без оценки диагонального значения, т.е.

[c1] [c1], [c2] [c2] и так далее.

Я бы ожидать результаты:

For c1, the 3 best are c1c2, c1c3 and c1c5 

For c2, the 3 best are c2c1, c2c4, and c2c5 

For c3, the 3 best are c3c1, c3c2, and c3c4 

. 
. 
. 

ответ

0
In [18]: r = [[1, 10, 16, 0.5, 7], [11, 1, 1.3, 8, 6], [12, 12, 1, 4, 2], [3, 0.4, 2, 1, 9], [4, 7, 2, 0.9, 1]] 
    ...: df = pd.DataFrame(r) 
    ...: 

In [19]: a = df.values 
    ...: a.sort(axis=1) 
    ...: 

In [20]: sorted_values = a[:, -3::] 

In [21]: sorted_values 
Out[21]: 
array([[ 7., 10., 16.], 
     [ 6., 8., 11.], 
     [ 4., 12., 12.], 
     [ 2., 3., 9.], 
     [ 2., 4., 7.]]) 

In [22]: ##or in reverse 
    ...: sorted_values[:, ::-1] 
Out[22]: 
array([[ 16., 10., 7.], 
     [ 11., 8., 6.], 
     [ 12., 12., 4.], 
     [ 9., 3., 2.], 
     [ 7., 4., 2.]]) 
+0

Как о том, когда кадр данных состоит из отрицательных и положительных значений, что очень близко (-0.9844, 0,995 и т.д.) к диагональному значение 1 ? –

+0

Я думал о замене диагональных значений большим отрицательным числом и сортировать его снова, так как меня интересуют только самые большие 3. –

Смежные вопросы