Добавление столбца в фрейм данных на основе ранга значений в предыдущих столбцах

1

Мой dataframe выглядит так:

      Date       AAPL      NFLX       INTC    
20 2008-01-31  27.834286  3.764286  25.350000            
40 2008-02-29  27.847143  3.724286  24.670000   
60 2008-03-31   27.834286  3.764286  25.350000     

Представьте, что они% возвращаются выше. Как я могу ранжировать значения в трех столбцах, чтобы теперь был показан кадр данных:

      Date       AAPL      NFLX       INTC      Rank_Max  Rank_Min
20 2008-01-31  27.834286  3.764286  25.350000     AAPL      NFLX        
40 2008-02-29  27.847143  33.724286  24.670000    NFLX      INTC
60 2008-03-31   27.834286  3.764286  25.350000    etc

Спасибо.

Теги:
pandas
dataframe
sorting

2 ответа

2

Сначала найдите ранги (эта функция, кстати, отфильтровывает любые нечисловые столбцы):

ranks = df.rank(axis=1, numeric_only=True)

Затем найдите индексы самых маленьких и самых больших рангов:

df['Rank_Max'] = ranks.idxmax(axis=1)
df['Rank_Min'] = ranks.idxmin(axis=1)
df
#          Date       AAPL       NFLX   INTC Rank_Max Rank_Min
#20  2008-01-31  27.834286   3.764286  25.35     AAPL     NFLX
#40  2008-02-29  27.847143  33.724286  24.67     NFLX     INTC
#60  2008-03-31  27.834286   3.764286  25.35     AAPL     NFLX
0

Использование idxmax и idxmin:

df['Rank_Max'] = df[['AAPL', 'NFLX', 'INTC']].idxmax(axis=1)
df['Rank_Min'] = df[['AAPL', 'NFLX', 'INTC']].idxmin(axis=1)

print(df)

          Date       AAPL      NFLX   INTC Rank_Max Rank_Min
20  2008-01-31  27.834286  3.764286  25.35     AAPL     NFLX
40  2008-02-29  27.847143  3.724286  24.67     AAPL     NFLX
60  2008-03-31  27.834286  3.764286  25.35     AAPL     NFLX
  • 0
    ок, спасибо, а как применить .idxmax только к определенным столбцам? Что-то вроде: df ['Rank_Max'] = df [[5: 8]]. Idxmax ()?
  • 0
    @EksanaStasis, я уже ограничил некоторые столбцы фильтрацией, например, df[['AAPL', 'NFLX', 'INTC']] . Если вы хотите идентифицировать столбцы по целому расположению, используйте df.iloc[:, 5:8] .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню