получить второе по величине значение в строке в выбранных столбцах в кадре данных в пандах - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть датафрейм с подмножеством, показанным ниже. Справа и слева от тех столбцов, которые я вам показываю, есть еще столбцы

M_cols  10D_MA  30D_MA  50D_MA  100D_MA 200D_MA       Max   Min   2nd smallest
        68.58    70.89   69.37   **68.24**   64.41   70.89   64.41   68.24 
        **68.32**71.00   69.47   68.50   64.49       71.00   64.49   68.32 
        68.57 **68.40**  69.57   71.07   64.57       71.07   64.57   68.40 

Я могу получить min (и max тоже легко) с помощью следующего кода

df2['MIN'] = df2[['10D_MA','30D_MA','50D_MA','100D_MA','200D_MA']].max(axis=1)

Но как мне получить 2-й самый маленький? Я попробовал это и получил следующую ошибку

df2['2nd SMALLEST'] = df2[['10D_MA','30D_MA','50D_MA','100D_MA','200D_MA']].nsmallest(2)

TypeError: nsmallest () отсутствует 1 обязательный позиционный аргумент: 'columns'

Кажется, это должен быть простой ответ, но я застрял

1 Ответ

0 голосов
/ 30 апреля 2018

Например, у вас есть следующий df

df=pd.DataFrame({'V1':[1,2,3],'V2':[3,2,1],'V3':[3,4,9]})

После подбора значения нужно сравнивать, нам просто нужно отсортировать значение по оси = 0 (по умолчанию)

sortdf=pd.DataFrame(np.sort(df[['V1','V2','V3']].values))
sortdf
Out[419]: 
   0  1  2
0  1  3  3
1  2  2  4
2  1  3  9

1-й максимум:

sortdf.iloc[:,-1]
Out[421]: 
0    3
1    4
2    9
Name: 2, dtype: int64

2-й максимум

sortdf.iloc[:,-2]
Out[422]: 
0    3
1    2
2    3
Name: 1, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...