найти максимум в строках датафрейма в конкретных столбцах и записать название столбца в ячейку

есть датафрейм вида:

index data x1 x2 x3 Result
A st1 4 5 6
B st2 3 7 6
.. .. .. .. ..
Z st500 1 0 8

как мне красиво найти максимум по каждой строке A-Z среди столбцов x1-x3 и в столбец Result занести название столбца, в котором найден максимум.


Ответы (1 шт):

Автор решения: strawdog

При df:

    data  x1  x2  x3
A   str1  76  41  33
B   str2  18  82  28
C   str3  62  33  48
.  .  .
X  str24  57  66   1
Y  str25  10  86  24
Z  str26  50  74  58

воспользуйтесь методом idxmax с указанием нужной axis:

df["Result"] = df[["x1", "x2", "x3"]].idxmax(axis=1)

результат будет таким:

    data  x1  x2  x3 Result
A   str1  76  41  33     x1
B   str2  18  82  28     x2
C   str3  62  33  48     x1
.  .  .
X  str24  57  66   1     x2
Y  str25  10  86  24     x2
Z  str26  50  74  58     x2

Дополнение:

Если вам нужно найти максимумы в числовых столбцах, а их количество не известно или может меняться, есть более универсальный способ:

import numpy as np

df["Result"] = df.select_dtypes(np.number).idxmax(axis=1)

Результат, понятно, будет тот же.

→ Ссылка