Как найти максимальное встречающееся значение в 2-мерном массиве?

Есть DataFrame: 3 колонки (float), 100 строк.

Задача: найти максимальное встречающееся значение в этом 2-мерном массиве. Не отдельно в каждой колонке, а в целом массиве!

Пример: значение 1.274 (15-раз встречалось в массиве)

По возможности выявлять, что только значение максимально встречающееся (т.е. если встречается более 10 раз, допустим, если меньше то и не надо)? И возможно ли само это значение (float) со счетчиком где-то отдельно хранить или передавать в переменные или в массив?


Ответы (1 шт):

Автор решения: MaxU

Можно сначала выпрямить таблицу, воспользовавшись .stack(), превратив ее в список (Series). После этого воспользоваться методом .mode(), который тоже возвращает Series и наконец взять первый элемент этого ряда:

res = df.stack().mode().iloc[0]

Пример:

In [131]: df
Out[131]: 
   a  b  c
0  1  2  3
1  2  4  2
2  1  4  8

In [132]: df.stack().mode().iloc[0]
Out[132]: 2

Пошагово:

In [133]: df.stack()
Out[133]: 
0  a    1
   b    2
   c    3
1  a    2
   b    4
   c    2
2  a    1
   b    4
   c    8
dtype: int64

In [134]: df.stack().mode()
Out[134]: 
0    2
dtype: int64

In [135]: df.stack().mode().iloc[0]
Out[135]: 2

UPD: чтобы получить частотность значений:

In [137]: df.stack().value_counts()
Out[137]: 
2    3
4    2
1    2
8    1
3    1
dtype: int64
→ Ссылка