Как вернуть относительный индекс максимального значения во временном ряду в pandas

Здесь у меня есть фрейм данных, который указывает объем различных акций за определенный период времени. (Реальный набор данных должен быть расширен до тысяч различных акций, а период времени также произволен, df здесь — просто упрощенный пример)

            d-1     d-2    d-3     d-4
00001.SH    5000    4600    4893   2321
00002.SH    2134    3456    6433   2131
00003.SH    3543    3128    5423   9642
00032.RS    3234    6432    2234   3213
00006.RS    3435    3452    1231   1229
00004.LH    3213    4232    3652   1233

Я пытаюсь найти относительный индекс максимального объема каждой акции во временном ряду, чтобы я мог ранжировать найденные индексы. Для удобства ранжирования я хочу, чтобы индекс временного ряда был целым числом, например, «d-1» равно 1, «d-2» равно 2, «d-3» равно 3,...., и так далее

например, для 00001.SH я бы хотел, чтобы он возвращал 1 (d-1), и конечный результат должен быть таким

00001.SH    1
00002.SH    3
00003.SH    4
00032.RS    2
00006.RS    2
00004.LH    2

Я знаю, что это можно сделать с помощью циклов, но могу ли я спросить, есть ли более эффективный способ? Поскольку набор данных достаточно велик, запуск циклов занимает много времени. Любая помощь приветствуется, большое спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
409
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте DataFrame.idxmax для столбцов по максимальным значениям, а затем извлеките цифры с помощью Series.str.extract:

s = df.idxmax(axis=1).str.extract('(\d+)', expand=False)
print (s)
00001.SH    1
00002.SH    3
00003.SH    4
00032.RS    2
00006.RS    2
00004.LH    2
dtype: object

Или вы можете сначала извлечь, а затем использовать idxmax:

df.columns = df.columns.str.extract('(\d+)', expand=False)

#if is posible assign values by length of columns
#df.columns = range(1, len(df.columns) + 1)
print (df)
             1     2     3     4
00001.SH  5000  4600  4893  2321
00002.SH  2134  3456  6433  2131
00003.SH  3543  3128  5423  9642
00032.RS  3234  6432  2234  3213
00006.RS  3435  3452  1231  1229
00004.LH  3213  4232  3652  1233

s = df.idxmax(axis=1)
print (s)
00001.SH    1
00002.SH    3
00003.SH    4
00032.RS    2
00006.RS    2
00004.LH    2
dtype: object

конечно, дай мне попробовать

Cooper 21.12.2020 10:57

Другие вопросы по теме