Выбор значений в столбце на основе максимальных значений другого столбца - PullRequest
2 голосов
/ 02 февраля 2020

Я выбираю значения в Pandas DataFrame.
Я хотел бы выбрать значения в столбцах «One_T», «Two_T», «Three_T» (что означает общее количество) на основе Крысы ios столбцов ('One_R', 'Two_R', 'Three_R').

Сравнение значений выполняется по столбцам ('One_R', 'Two_R', 'Three_R') и ​​выбор значений будет быть сделано по столбцам ('One_T', 'Two_T', 'Three_T').

Я хотел бы найти самые высокие значения среди столбцов ('One_R', 'Two_R', 'Three_R') и ​​поместить значения из столбцов 'One_T', 'Two_T', 'Three_T' в новом столбце 'Highest'.

Например, первая строка имеет самые высокие значения в One_R, чем Two_R и Three_R. Затем значения в One_T будут заполнены столбцом с именем Highest.

Начальный кадр данных - это test ниже кода, а желаемый результат - result в приведенном ниже код.

test = pd.DataFrame([[150,30,140,20,120,19],[170,31,130,30,180,22],[230,45,100,50,140,40],
                    [140,28,80,10,60,10],[100,25,80,27,50,23]], index=['2019-01-01','2019-02-01','2019-03-01','2019-04-01','2019-05-01'],
                   columns=['One_T','One_R','Two_T','Two_R','Three_T','Three_R'])
 One_T  One_R   Two_T   Two_R   Three_T Three_R
2019-01-01  150 30  140 20  120 19
2019-02-01  170 31  130 30  180 22
2019-03-01  230 45  100 50  140 40
2019-04-01  140 28  80  10  60  10
2019-05-01  100 25  80  27  50  23
result = pd.DataFrame([[150,30,140,20,120,19,150],[170,31,130,30,180,22,170],[230,45,100,50,140,40,100],
                    [140,28,80,10,60,10,140],[100,25,80,27,50,23,80]], index=['2019-01-01','2019-02-01','2019-03-01','2019-04-01','2019-05-01'],
                   columns=['One_T','One_R','Two_T','Two_R','Three_T','Three_R','Highest'])
One_T   One_R   Two_T   Two_R   Three_T Three_R Highest
2019-01-01  150 30  140 20  120 19  150
2019-02-01  170 31  130 30  180 22  170
2019-03-01  230 45  100 50  140 40  100
2019-04-01  140 28  80  10  60  10  140
2019-05-01  100 25  80  27  50  23  80

Есть ли способ сделать это?

Спасибо за время и соображения.

1 Ответ

2 голосов
/ 02 февраля 2020

Вы можете решить эту проблему, используя df.filter, чтобы выбрать столбцы с суффиксом _R, затем idxmax. Затем замените _R на _T и используйте df.lookup:

s = test.filter(like='_R').idxmax(1).str.replace('_R','_T')
test['Highest'] = test.lookup(s.index,s)
print(test)

            One_T  One_R  Two_T  Two_R  Three_T  Three_R  Highest
2019-01-01    150     30    140     20      120       19      150
2019-02-01    170     31    130     30      180       22      170
2019-03-01    230     45    100     50      140       40      100
2019-04-01    140     28     80     10       60       10      140
2019-05-01    100     25     80     27       50       23       80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...