У меня довольно простой вопрос - я думаю - но, похоже, я не могу обернуться вокруг этого.Я начинающий с Python и Pandas.Я искал форум, но не смог получить (недавний) ответ, который соответствует моим потребностям.
У меня есть фрейм данных, такой как этот:
df = pd.DataFrame({'A': [1.1, 2.7, 5.3], 'B': [2, 10, 9], 'C': [3.3, 5.4, 1.5], 'D': [4, 7, 15]}, index = ['a1', 'a2', 'a3'])
, который дает:
A B C D
a1 1.1 2 3.3 4
a2 2.7 10 5.4 7
a3 5.3 9 1.5 15
Мой вопрос прост: я хотел бы добавить столбец, который дает имя столбца секунда максимальное значение каждой строки.
Я написал простую функцию, которая возвращает второе максимальное значение для каждой строки
def get_second_best(x):
return sorted(x)[-2]
df['value'] = df.apply(lambda row: get_second_best(row), axis=1)
, которая дает:
A B C D value
a1 1.1 2 3.3 4 3.3
a2 2.7 10 5.4 7 7.0
a3 5.3 9 1.5 15 9.0
Но я не могу найти, как отобразить имя столбца встолбец «значение», а не значение ... Я думаю о булевой индексации (сравнивая значения столбца «значение» с каждой строкой), но я не понял, как это сделать.
Чтобы быть более понятным, я хотел бы, чтобы это было:
A B C D value
a1 1.1 2 3.3 4 C
a2 2.7 10 5.4 7 D
a3 5.3 9 1.5 15 B
Любая помощь (и объяснение) приветствуется!