我在Python Pandas系列中有一些值(类型: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 doc之后,我认为cut
函数可以帮助我,因为它是一个离散化问题。。。但我不知道怎么用)
在能够做到这一点之后,我将看看如何显示直方图(但这是另一个问题)
为了得到给定间隔binned范围内的值的频率计数,我们可以使用^{} 来返回每个元素的半打开的bin的索引以及^{} 来计算它们各自的计数。
要绘制计数,可以绘制条形图。
按计数降序排列的每个间隔的频率:
为了美观起见,要修改绘图以仅包含范围的较低闭合间隔,可以执行以下操作:
如果你说你想得到直方图的值,你只是在寻找序列中每个唯一值的频率,如果我没有弄错的话。在这种情况下,您可以简单地执行
serie.value_counts()
,这将为您提供:您只需要使用
NumPy
的histogram函数:其中division是自动计算的箱子边界,count是每个箱子内的人口。
如果需要修复一定数量的bin,可以使用参数bins并指定若干个bin,或者直接为其指定每个bin之间的边界。
要绘制结果,可以使用matplotlib函数hist,但如果在pandas中工作,则每个系列都有自己的hist函数句柄,并且可以为其指定选定的binning:
编辑: 正如另一张海报所提到的,
Pandas
是建立在NumPy
之上的。由于OP显式地使用Pandas
,我们可以通过Pandas
访问NumPy
来消除额外的导入:相关问题 更多 >
编程相关推荐