Вернуть максимальное значение из panda данных в целом, а не на основе столбца или строк

Я пытаюсь получить максимальное значение из фрейма panda в целом. Меня не интересует, в какой строке или столбце она появилась. Меня интересует только одно максимальное значение в пределах кадра данных.

Вот мой dataframe:

df = pd.DataFrame({'group1': ['a','a','a','b','b','b','c','c','d','d','d','d','d'],
                        'group2': ['c','c','d','d','d','e','f','f','e','d','d','d','e'],
                        'value1': [1.1,2,3,4,5,6,7,8,9,1,2,3,4],
                        'value2': [7.1,8,9,10,11,12,43,12,34,5,6,2,3]})

Это выглядит так:

   group1 group2  value1  value2
0       a      c     1.1     7.1
1       a      c     2.0     8.0
2       a      d     3.0     9.0
3       b      d     4.0    10.0
4       b      d     5.0    11.0
5       b      e     6.0    12.0
6       c      f     7.0    43.0
7       c      f     8.0    12.0
8       d      e     9.0    34.0
9       d      d     1.0     5.0
10      d      d     2.0     6.0
11      d      d     3.0     2.0
12      d      e     4.0     3.0

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

43.0

Я был в предположении, что df.max() выполнит эту работу, но вернет максимальное значение для каждого столбца, но меня это не интересует. Мне нужен максимум от всего кадра данных.

Ответ 1

Максимальное значение всех значений в DataFrame можно получить с помощью df.values.max():

In [10]: df.values.max()
Out[10]: 'f'

Максимальное значение f, а не 43.0, поскольку в CPython2

In [11]: 'f' > 43.0
Out[11]: True

В CPython2, Объекты разных типов... упорядоченных по именам типов. Таким образом, любой str сравнивается с любым int больше, чем 'str' > 'int'.

В Python3 сравнение строк и ints вызывает a TypeError.


Чтобы найти максимальное значение только в числовых столбцах, используйте

df.select_dtypes(include=[np.number]).max()

Ответ 2

Привет, самый простой ответ заключается в следующем. Ответ:

df.max().max()

Объяснение:
series = df.max() дает вам серию, содержащую максимальные значения для каждого столбца.
Поэтому series.max() дает вам максимум для всего фрейма данных.

:) Лучшие ответы обычно являются простейшими

Ответ 3

Макс можно найти в этих двух шагах:

maxForRow = allData.max(axis=0) #max for each row
globalMax = maxForRow.max(); #max across all rows

Ответ 4

Для максимума проверьте предыдущий ответ... Для максимального значения используйте, например:

val_cols = [c for c in df.columns if c.startswith('val')]
print df[val_cols].max()