2016-11-19 8 views
0

У меня есть dataframe с 6 столбцами и значениями float в нем. Поэтому мне нужно выбрать для каждой строки 3-х столбцов (ограниченных пробелом) с наивысшими значениями в каждой строке. Например, сВыбирать имена столбцов по значению

rowIndex col1 col2 col3 col4 col5 col6 
     1 0.2 0.4 0.1 1.2 2.2 0.2 
     2 4.1 2.3 0.1 2.2 0.2 0.2 

результат shold выглядеть следующим образом:

rowIndex importances 
     1 col5 col4 col2 
     2 col1 col2 col3 

ответ

0
import pandas as pd 
import numpy as np 

nrows = 2 
ncols = 6 
df = pd.DataFrame(np.random.rand(nrows,ncols), index=list(range(nrows)), columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6']) 

print(df) 

for row in range(nrows): 
    maxCol1, maxCol2, maxCol3 = 0, 0, 0 
    for col in range(ncols): 
     if(df.iloc[row, col] > df.iloc[row, maxCol1]): 
      maxCol3 = maxCol2 
      maxCol2 = maxCol1 
      maxCol1 = col 
     elif(df.iloc[row, col] > df.iloc[row, maxCol2]): 
      maxCol3 = maxCol2 
      maxCol2 = col 
     elif(df.iloc[row, col] > df.iloc[row, maxCol3]): 
      maxCol3 = col 
    print("{} {} {} {}".format(row+1, df.columns[maxCol1], df.columns[maxCol2], df.columns[maxCol3])) 

бы получить результат, как:

col1  col2  col3  col4  col5  col6 
0 0.116408 0.316982 0.811001 0.964968 0.019989 0.674887 
1 0.241690 0.429653 0.456779 0.398780 0.861042 0.149223 
1 col4 col3 col6 
2 col5 col3 col2 

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

  • Нет связанных вопросов^_^