Мой 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
Спасибо.
Сначала найдите ранги (эта функция, кстати, отфильтровывает любые нечисловые столбцы):
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
Использование 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
df[['AAPL', 'NFLX', 'INTC']]
. Если вы хотите идентифицировать столбцы по целому расположению, используйтеdf.iloc[:, 5:8]
.