Как вернуть максимальное значение из нескольких столбцов в новый столбец в pandas df - PullRequest
3 голосов
/ 13 июля 2020

Приносим извинения за непрозрачное название вопроса (не знаю, как это назвать). У меня есть следующий фрейм данных:

import pandas as pd
import numpy as np

data = [['tom', 1,1,6,4],
        ['tom', 1,2,2,3],
        ['tom', 1,2,3,1],
        ['tom', 2,3,2,7],
        ['jim', 1,4,3,6],
        ['jim', 2,6,5,3]]

df = pd.DataFrame(data, columns = ['Name', 'Day','A','B','C']) 
df = df.groupby(by=['Name','Day']).agg('sum').reset_index()
df

введите описание изображения здесь

Я хотел бы добавить еще один столбец, который возвращает текст, в соответствии с которым столбец A,B,C является самым высоким:

Например, я бы хотел Apple, если A самый высокий, Banana, если B самый высокий, и Carrot, если C самый высокий. Итак, в приведенном выше примере значения для 4 столбцов должны быть:

New Col
Carrot
Apple
Banana
Carrot

Любая помощь будет принята с благодарностью! Спасибо

Ответы [ 2 ]

4 голосов
/ 13 июля 2020

Используйте DataFrame.idxmax вместе с axis=1 с Series.map:

dct = {'A': 'Apple', 'B': 'Banana', 'C': 'Carrot'}
df['New col'] = df[['A', 'B', 'C']].idxmax(axis=1).map(dct)

Результат:

  Name  Day  A   B  C New col
0  jim    1  4   3  6  Carrot
1  jim    2  6   5  3   Apple
2  tom    1  5  11  8  Banana
3  tom    2  3   2  7  Carrot
1 голос
/ 13 июля 2020

Ответ @ ShubhamSharma лучше этого, но вот еще один вариант:

df['New col'] = np.where((df['A'] > df['B']) & (df['A'] > df['C']), 'Apple', 'Carrot')
df['New col'] = np.where((df['B'] > df['A']) & (df['B'] > df['C']), 'Banana', df['New col'])

вывод:

    Name    Day A   B   C   New col
0   jim 1   4   3   6   Carrot
1   jim 2   6   5   3   Apple
2   tom 1   5   11  8   Banana
3   tom 2   3   2   7   Carrot
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...