Как найти максимальное значение среди столбцов в Pandas
Код должен перебрать значения столбцов строки и вернуть индексы(в идеале сразу имена) тех столбцов, значения в которых максимальны. Вот функция которую я написал:
data = pd.read_csv(path)
def max_val_ind(data):
c=0
final_idx = pandas.Series()
for i in range(0,len(data.index)):
max_val=0;
max_ind=pandas.Series();
samp = data.iloc[i,idx[c]]
if samp>max_val:
max_val=samp
max_ind.append(c)
elif samp==max_val:
max_ind.append(c)
final_idx.append(max_ind)
c+=1
return final_idx
max_val_ind(data)
Про задачу: значения столбцов рейтинг - игрока на позиции на позиции, моя задача - найти оптимальную(-ые) позиции для каждого игрока и записать их в отдельный столбец
ГитХаб с датасетом https://github.com/georgemartynov/fifa_data
Пример:
На входе получаем вот такую таблицу:
На выходе хочу увидеть столбец, где будут записаны названия столбцов с максимальным значением в строке
best_positions:
ls,rs
ls
st
rb
cb,lb
rwb,rb,rcb,cb
Ответы (2 шт):
Воспользуйтесь функцией DataFrame.max(axis=1) или DataFrame.idxmax(axis=1) если вы хотите получить имя столбца с максимальным значением для каждой строки.
import pandas
import seaborn as sns
#загружаем данные
data = pandas.read_csv('players_20.csv')
#меняем сумму в столбцах на значение
col_idx = (data.columns == "ls").argmax()
data.iloc[:, col_idx:] = data.iloc[:, col_idx:].fillna('0+0')
r = (data.iloc[:, col_idx:].dropna().apply(lambda x: x.str.split("+", expand=True).rename(columns={0:"a", 1:"b"}).astype(int).eval("a+b")))
data.iloc[:, col_idx:] = r
#ищем столбцы с максимальным значением и записываем их
best = [r.columns[i].tolist() for i in r.values == r.max(axis=1)[:,None]]
data['best_pos'] = best