Обработка оператора применения для более быстрого получения имен столбцов для каждой строки в python

avatar
Ganesh R
1 июля 2021 в 21:19
54
1
0

Я пытаюсь получить имена столбцов, которые соответствуют определенной строке "Buy" для каждой строки фрейма данных (df). Таким образом, если есть 2 столбца, соответствующие "Buy", то учитываются оба имени столбца. Я попробовал приведенный ниже код, который отлично работает, но для его выполнения требуется много времени. Есть ли способ улучшить его производительность, поскольку я вижу, что оператор применения влияет на производительность. Я слышал о применении векторизации/быстрее для повышения производительности, но я не могу понять, как применить его для моего конкретного требования.

Шаг 1:

Получить имена столбцов, содержащие '_buy_sell' в качестве частичной строки в имени столбца:

[Col_Buy_Sell]==[col for col in df.columns if '_buy_sell' in col]

Шаг 2:

В выбранных столбцах на шаге 1, если какое-либо значение равно 'Buy', то все имена этих столбцов перемещаются в поле 'Final_Buy'. Несколько столбцов разделены знаком ",":

df['Final_Buy']=(df[Col_Buy_Sell] == 'Buy').apply(lambda y: (','.join(df[Col_Buy_Sell].columns[y])), axis=1)

Заранее спасибо!

Источник
sophros
2 июля 2021 в 12:47
0

Пожалуйста, добавьте пример данных и ожидаемый результат.

Ответы (1)

avatar
norie
2 июля 2021 в 12:53
0

Если вы хотите заполнить новый столбец именами всех столбцов в каждой строке со значением «Купить», попробуйте это.

df['Final_Buy'] = df.eq('Buy').dot(df.columns + ',').str.rstrip(', ')