Python 数据分组与统计

数据分组与统计可以用pandas.cut。
下面给出的例子是将[1,3,4,11,20,24,42,53,55,57,99]这个列表中的数字按1-1011-2021-30…等分组,统计各分组内出现数据的次数与频率。

用法:

1
2
3
4
5
6
7
8
9
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)

x : 需要切分的数据
bins : 切分区域
right : 是否包含右端点默认True,包含
labels : 对应标签,用标记来代替返回的bins,若不在该序列中,则返回NaN
retbins : 是否返回间距bins
precision : 精度
include_lowest : 是否包含左端点,默认False,不包含

例子:

1
2
3
4
5
6
7
import pandas as pd

listBins = [0,10,20,30,40,50,60,100] # 区间设置
listLabels = ['0-10', '11-20', '21-30', '31-40', '41-50', '51-60', '61-100'] # 对应的区间标签
data=[1,3,4,11,20,24,42,53,55,57,99] # 要划分的数据

result = pd.cut(data, bins=listBins, labels=listLabels, include_lowest=True)

查看分组数据,1,3,4属于[0,10]区间,以区间标签0-10表示,以此类推:

1
2
3
4
>>> result.view()
[0-10, 0-10, 0-10, 11-20, 11-20, ..., 41-50, 51-60, 51-60, 51-60, 61-100]
Length: 11
Categories (7, object): [0-10 < 11-20 < 21-30 < 31-40 < 41-50 < 51-60 < 61-100]

查看分组统计,查看数据中各分区出现的次数。

1
2
3
4
5
6
7
8
9
>>> result.value_counts()
0-10 3
11-20 2
21-30 1
31-40 0
41-50 1
51-60 3
61-100 1
dtype: int64

查看数据中各分区的百分比:

1
2
3
4
5
6
7
8
9
10
>>> result.describe()
counts freqs
categories
0-10 3 0.272727
11-20 2 0.181818
21-30 1 0.090909
31-40 0 0.000000
41-50 1 0.090909
51-60 3 0.272727
61-100 1 0.090909

转为字典:

1
2
3
>>> rate = result.describe()
>>> rate.to_dict()
{'counts': {'0-10': 3, '11-20': 2, '21-30': 1, '31-40': 0, '41-50': 1, '51-60': 3, '61-100': 1}, 'freqs': {'0-10': 0.2727272727272727, '11-20': 0.18181818181818182, '21-30': 0.09090909090909091, '31-40': 0.0, '41-50': 0.09090909090909091, '51-60': 0.2727272727272727, '61-100': 0.09090909090909091}}

- - END - -


腾讯云
0%