pandas系列的直方图值

我在Python Pandas系列中有一些值(types:pandas.core.series.Series)

In [1]: series = pd.Series([0.0,950.0,-70.0,812.0,0.0,-90.0,0.0,0.0,-90.0,0.0,-64.0,208.0,0.0,-90.0,0.0,-80.0,0.0,0.0,-80.0,-48.0,840.0,-100.0,190.0,130.0,-100.0,-100.0,0.0,-50.0,0.0,-100.0,-100.0,0.0,-90.0,0.0,-90.0,-90.0,63.0,-90.0,0.0,0.0,-90.0,-80.0,0.0,]) In [2]: series.min() Out[2]: -100.0 In [3]: series.max() Out[3]: 950.0 

我想得到直方图的值(不必绘制直方图)…我只需要得到每个区间的频率。

假设我的间隔从[-200; -150]至[950; 1000]

所以下界是

 lwb = range(-200,1000,50) 

和上限是

 upb = range(-150,1050,50) 

我不知道如何获得频率(每个区间内的值的数量)现在…我相信定义lwb和upb是没有必要的…但我不知道我应该使用什么函数去执行这个! (在Pandas文档中潜水后,我认为cut函数可以帮助我,因为这是一个离散化问题…但我不明白如何使用它)

能够做到这一点后,我会看看直方图的显示方式(但这是另一个问题)

你只需要使用numpy的直方图function:

 import numpy as np count, division = np.histogram(series) 

其中分区是您的箱子的自动计算边界,计数是每个箱子内的人口数量。

如果您需要修复一定数量的垃圾箱,您可以使用参数箱并指定垃圾箱数量,或者直接给出每个垃圾箱之间的边界。

 count, division = np.histogram(series, bins = [-201,-149,949,1001]) 

要绘制结果,你可以使用matplotlib函数hist,但是如果你在pandas中工作,每个系列对hist函数都有自己的句柄,你可以给它select的binning:

 series.hist(bins=division) 

为了得到给定区间分档范围内的值的频率计数,我们可以使用pd.cut ,它返回每个元素的半开放元素的索引以及value_counts来计算它们各自的计数。

为了绘制他们的计数,可以制作一个条形图。

 step = 50 bin_range = np.arange(-200, 1000+step, step) out, bins = pd.cut(s, bins=bin_range, include_lowest=True, right=False, retbins=True) out.value_counts(sort=False).plot.bar() 

在这里输入图像说明

每个区间的频率按其计数的降序sorting:

 out.value_counts().head() [-100, -50) 18 [0, 50) 16 [800, 850) 2 [-50, 0) 2 [950, 1000) 1 dtype: int64 

要修改绘图以包含范围的较低的closures间隔以达到审美目的,您可以执行以下操作:

 out.cat.categories = bins[:-1] out.value_counts(sort=False).plot.bar() 

在这里输入图像说明

如果你说你想得到直方图的值,那么只要查看你的系列中每个独特值的频率,如果我没有弄错的话。 在这种情况下,你可以简单地做serie.value_counts() ,它会给你:

  0.0 16 -90.0 8 -100.0 5 -80.0 3 63.0 1 -50.0 1 130.0 1 190.0 1 840.0 1 -48.0 1 208.0 1 -64.0 1 812.0 1 -70.0 1 950.0 1