如何使用np.histogram()查找列中最频繁的值

时间:2020-02-12 11:01:18

标签: python pandas numpy histogram

我有一个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 个答案:

答案 0 :(得分:1)

这是一种实现方法:

// often used to represent API/process status etc
when(Status.ERROR){
    in listOf(Status.ERROR, Status.EXCEPTION) -> println("Something when wrong") 
    else -> println("Success")
}

enum class Status{
    SUCCESS, ERROR, EXCEPTION
}

您也可以将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

或者,如果您的数据仅包含正数,则可以直接使用np.bincount

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

当然还有scipy.stats.mode

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

答案 1 :(得分:1)

可以通过以下方式完成:

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

您只需要仔细阅读文档即可。它说如果bins[1, 2, 3, 4],则第一个bin是[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,...