Как выбрать максимальное значение в каждой строке в Pandas

Вопрос или проблема

У меня есть этот дата-фрейм:

Server     1-Jun   6-Jun   1-jul  Jul-10
ServerA    8        9        5     90
ServerB    100      10      9     90

Мне нужно создать еще один столбец под названием maximumval и выбрать максимальное значение за все месяцы для каждого сервера:

Получившийся дата-фрейм должен выглядеть так:

Server     1-Jun   6-Jun   1-jul  Jul-10.  maximumval
ServerA    8        9        5    90       90
ServerB    100      10      9     90       100

Я пытался сделать это:

df['maximumval'] = df.max(axis=1)

Но получил эту ошибку:

'>=' no supported between instances of 'str' and 'float'

Какие-нибудь идеи, что это значит? Как это исправить?

Это происходит из-за столбца “Server”, который содержит строки.

Используйте опцию numeric_only=True метода max:

df['maximumval'] = df.max(numeric_only=True, axis=1)

В качестве альтернативы используйте select_dtypes, чтобы оставить только числовые столбцы:

df['maximumval'] = df.select_dtypes('number').max(axis=1)

Результат:

    Server  1-Jun  6-Jun  1-jul  Jul-10  maximumval
0  ServerA      8      9      5      90          90
1  ServerB    100     10      9      90         100

Ответ или решение

Чтобы выбрать максимальное значение из каждой строки в DataFrame при помощи библиотеки pandas, можно воспользоваться несколькими подходами. Ваша задача заключается в том, чтобы добавить новый столбец, в котором будет находиться максимальное значение по месячным данным для каждого сервера.

Рассмотрим, как это сделать, основываясь на приведенном вами примере.

Пример DataFrame

Имеем следующий DataFrame:

import pandas as pd

data = {
    'Server': ['ServerA', 'ServerB'],
    '1-Jun': [8, 100],
    '6-Jun': [9, 10],
    '1-jul': [5, 9],
    'Jul-10': [90, 90]
}

df = pd.DataFrame(data)

Причина Ошибки

Вы пытаетесь использовать метод max(axis=1), но получаете ошибку: '>=' not supported between instances of 'str' and 'float'. Это происходит потому, что столбец Server содержит строки, а метод max пытается применять сравнение к всем значениям в строке.

Решение

Для решения проблемы можно использовать параметр numeric_only=True, чтобы игнорировать нечисловые столбцы, или выбрать только числовые данные с помощью метода select_dtypes.

Вот два варианта, как это можно сделать:

Вариант 1: Используя numeric_only=True

df['maximumval'] = df.max(numeric_only=True, axis=1)

Вариант 2: Используя select_dtypes

df['maximumval'] = df.select_dtypes(include='number').max(axis=1)

Полный Код

В итоге, код будет выглядеть следующим образом:

import pandas as pd

# Создание DataFrame
data = {
    'Server': ['ServerA', 'ServerB'],
    '1-Jun': [8, 100],
    '6-Jun': [9, 10],
    '1-jul': [5, 9],
    'Jul-10': [90, 90]
}

df = pd.DataFrame(data)

# Добавление столбца с максимальными значениями
df['maximumval'] = df.max(numeric_only=True, axis=1)

# Альтернативный способ
# df['maximumval'] = df.select_dtypes(include='number').max(axis=1)

# Вывод результата
print(df)

Ожидаемый Результат

Результирующий DataFrame будет выглядеть следующим образом:

    Server  1-Jun  6-Jun  1-jul  Jul-10  maximumval
0  ServerA      8      9      5      90          90
1  ServerB    100     10      9      90         100

Таким образом, вы сможете успешно добавить новый столбец с максимальными значениями для каждого сервера, избегая при этом ошибок, связанных с разными типами данных.

Оцените материал
Добавить комментарий

Капча загружается...