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

Python 如何使用np.histogram()查找列中最频繁的值,python,pandas,numpy,histogram,Python,Pandas,Numpy,Histogram,我有一个数据框,其中一列包含不同的数值我想使用np.histogram()函数查找最常出现的值。 我知道可以使用column.value_counts().nlargest(1)等函数来完成此任务,但是,我对如何使用np.histogram()函数来实现此目标感兴趣 通过这项任务,我希望能够更好地理解函数和结果值,因为文档()中的描述对我来说不太清楚 下面我将分享用于此任务的一系列示例值: data = pd.Series(np.random.randint(1,10,size=100)) 这

我有一个数据框,其中一列包含不同的数值我想使用np.histogram()函数查找最常出现的值。

我知道可以使用column.value_counts().nlargest(1)等函数来完成此任务,但是,我对如何使用np.histogram()函数来实现此目标感兴趣

通过这项任务,我希望能够更好地理解函数和结果值,因为文档()中的描述对我来说不太清楚

下面我将分享用于此任务的一系列示例值:

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

这是一种方法:

将numpy导入为np
作为pd进口熊猫
#制作数据
np.random.seed(0)
数据=pd.系列(np.random.randint(1,10,大小=100))
#做垃圾桶
bin=np.arange(data.min(),data.max()+2)
#计算直方图
h、 _uuNP.直方图(数据、箱)
#查找最频繁值
模式=箱[h.argmax()]
#模式计算与熊猫
mode_pd=data.value_counts().nlargest(1.index[0]
#检查结果
打印(模式==模式\U pd)
#真的
您还可以将
bin
定义为:

bin=np.unique(数据)
箱子=np.追加(箱子,箱子[-1]+1)
或者,如果您的数据仅包含正数,您可以直接使用:

mode=np.bincount(数据).argmax()
当然,还有:


这是一种方法:

将numpy导入为np
作为pd进口熊猫
#制作数据
np.random.seed(0)
数据=pd.系列(np.random.randint(1,10,大小=100))
#做垃圾桶
bin=np.arange(data.min(),data.max()+2)
#计算直方图
h、 _uuNP.直方图(数据、箱)
#查找最频繁值
模式=箱[h.argmax()]
#模式计算与熊猫
mode_pd=data.value_counts().nlargest(1.index[0]
#检查结果
打印(模式==模式\U pd)
#真的
您还可以将
bin
定义为:

bin=np.unique(数据)
箱子=np.追加(箱子,箱子[-1]+1)
或者,如果您的数据仅包含正数,您可以直接使用:

mode=np.bincount(数据).argmax()
当然,还有:

可通过以下方式完成:

hist, bin_edges = np.histogram(data, bins=np.arange(0.5,10.5))
result = np.argmax(hist)
您只需要更仔细地阅读文档。它说如果
箱子
[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、

,可以通过以下方法完成:

hist, bin_edges = np.histogram(data, bins=np.arange(0.5,10.5))
result = np.argmax(hist)
您只需要更仔细地阅读文档。它说,如果
存储箱是
[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(数据)
包括所有连续的整数0、1、2、3,…

嘿,谢谢你。那么你如何定义为一个具有n个唯一值的集合创建容器呢?我看到你在data.max中添加了+2-这对任何数量的容器都有效吗?@Maciej在第一个示例中,我假设
data
是整数,现在
np.arange(data.min(),data.max()+1)
将是
data
中的值范围,但最后一个箱子的上限需要一个额外的值,因此
np.arange(data.min(),data.max()+2)
。当使用
np.unique
时,您已经得到了排序后的值数组,因此您只需再为上限添加一个,我添加了最大值加上一位,它可以是任何值,只要它大于
数据中的最大值
。逻辑是相同的,与中不同值的数量无关e> data
@Maciej当然,另一个选项是将箱子边放在小数点处。还有一个问题。我知道hist保存每个箱子的计数或大小。bin_边保存箱子。我如何从np.argmax(hist)中获取感兴趣的值,如果它保存的是计数,而不是值?@Maciej你说得对,
hist
保存的是
data
中每个存储单元中的值数。因此,如果第一个存储单元是
[1,2)
,而
data
中有三个
1
,那么
hist[0]
将是
3
。现在,
argmax
为您提供
hist
中最大值的索引,因此对应于该位置的bin将告诉您最频繁的值。例如,在上一个示例中,如果
argmax
0
,则对应的bin为
[1,2)
,因此最常见的值应该是
1
。嘿,谢谢你。那么你如何定义为一个具有n个唯一值的集合创建容器?我看到你在data.max中添加了+2-这对任何数量的容器都有效吗?@Maciej在第一个示例中,我假设
data
是整数,现在
np.arange(data.min(),data.max()+1)
将是
data
中的值范围,但最后一个箱子的上限需要一个额外的值,因此
np.arange(data.min(),data.max()+2)
。当使用
np.unique
时,您已经得到了排序后的值数组,因此您只需再为上限添加一个值,我添加了最大值加上一位,只要它大于
数据中的最大值,它就可以是任何值。
。逻辑是相同的,与不同值的数量无关