熊猫系列的直方图值


69

我有一个Python熊猫系列的某些值(类型: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函数可以为我提供帮助,因为这是一个离散化问题...但是我不知道如何使用它)

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


奇异“系列”是“串联”:ell.stackexchange.com/questions/23268/...
kd88

Answers:


87

您只需要使用的直方图功能NumPy

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

其中除法是自动为您的垃圾箱计算的边界,计数是每个垃圾箱内的人口。

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

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

要绘制结果,可以使用matplotlib函数hist,但是如果您在熊猫中工作,则每个Series都具有自己的hist函数句柄,并且可以为其选择分箱:

series.hist(bins=division)

编辑:正如另一位发帖人所述,Pandas它建立在之上NumPy。由于OP是显式使用的Pandas,因此可以通过访问以下内容NumPy来取消其他导入Pandas

count, division = pd.np.histogram(series)

@FemtoTrader-熊猫基于numpy构建!!! stackoverflow.com/questions/11077023/… :-)
Scott Skiles

1
请注意,pd.np已弃用。请直接导入numpy :)
H.Sánchez20年

18

为了获得给定间隔合并范围内的值的频率计数,我们可以利用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()

在此处输入图片说明

每个间隔的频率按其计数的降序排列:

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

出于美学目的,为了修改图以仅包括范围的下闭合区间,您可以执行以下操作:

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

在此处输入图片说明


3

如果您说要获取直方图的值,那么我不会误会,您只是在寻找序列中每个唯一值的频率。在这种情况下,您可以简单地执行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

2
接近但直方图正在寻找每个bin中的频率,该频率可能包含多个唯一值。例如,-50和-48可能在同一容器中。OP的问题指定他的直方图具有间隔为50的区间
。– DataSwede
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.