Как найти наиболее частое значение в столбце с помощью np.histogram () - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть DataFrame, в котором один столбец содержит разные числовые значения. Я хотел бы найти наиболее часто встречающееся значение, в частности, используя функцию np.histogram ().

Я знаю, что эту задачу можно решить с помощью таких функций, как column.value_counts (). Однако nlargest (1) меня интересует, как можно использовать функцию np.histogram () для достижения этой цели.

С этой задачей я надеюсь лучше понять функцию и получающиеся значения, так как описание из документации (https://numpy.org/doc/1.18/reference/generated/numpy.histogram.html) мне не так понятно.

Ниже я поделюсь примером серии значений, которые будут использоваться для этой задачи:

data = pd.Series(np.random.randint(1,10,size=100))

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Это можно сделать с помощью:

hist, bin_edges = np.histogram(data, bins=np.arange(0.5,10.5))
result = np.argmax(hist)

Вам просто нужно более внимательно прочитать документацию. В нем говорится, что если bins равно [1, 2, 3, 4], то первая ячейка равна [1, 2), вторая - [2, 3), а третья - [3, 4).

Мы рассчитываем, какое количество чисел находится в ячейках [0.5, 1.5), [1.5, 2.5), ..., [8.5, 9.5) конкретно в вашей задаче и выбираем индекс максимального значения.

Просто в В этом случае стоит использовать

np.unique(data)[np.argmax(hist)]

, если мы не уверены, что ваш отсортированный набор данных np.unique(data) включает все последовательные целые числа 0, 1, 2, 3, ...

1 голос
/ 12 февраля 2020

Это один из способов сделать это:

import numpy as np
import pandas as pd

# Make data
np.random.seed(0)
data = pd.Series(np.random.randint(1, 10, size=100))
# Make bins
bins = np.arange(data.min(), data.max() + 2)
# Compute histogram
h, _ = np.histogram(data, bins)
# Find most frequent value
mode = bins[h.argmax()]
# Mode computed with Pandas
mode_pd = data.value_counts().nlargest(1).index[0]
# Check result
print(mode == mode_pd)
# True

Вы также можете определить bins как:

bins = np.unique(data)
bins = np.append(bins, bins[-1] + 1)

Или, если ваши данные содержат только положительные числа, вы можете напрямую использовать np.bincount:

mode = np.bincount(data).argmax()

Конечно, есть также scipy.stats.mode:

import scipy.stats
mode = scipy.stats.mode(data)[0][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...