我有一个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))
答案 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,...