Вопрос или проблема
У меня есть этот дата-фрейм:
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
Таким образом, вы сможете успешно добавить новый столбец с максимальными значениями для каждого сервера, избегая при этом ошибок, связанных с разными типами данных.