如何在 python 中创建频率表


频率表是显示不同类别的频率的表格。这种类型的表对于理解数据集中值的分布特别有用。

本教程介绍如何在 Python 中创建频率表。

一系列的单向频率表

要查找 pandas 系列中各个值的频率,可以使用value_counts()函数:

 import pandas as pd

#defineSeries
data = pd.Series([1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 5])

#find frequencies of each value
data.value_counts()

3 4
1 3
4 2
5 1
2 1

如果您不希望数据值按频率排序,可以添加sort=False参数:

 data.value_counts(sort= False )

1 3
2 1
3 4
4 2
5 1

结果解释方式如下:

  • 值“1”在该系列中出现3次。
  • 值“2”在该系列中出现1次。
  • 值“3”在该系列中出现了4次。

等等。

DataFrame的单向频率表

要查找 pandas DataFrame 的频率,可以使用crosstab ()函数,该函数使用以下语法:

交叉表(索引、列)

金子:

  • 索引:分组依据的列的名称
  • columns:频率列的名称

例如,假设我们有一个 DataFrame,其中包含班级中 10 名不同学生的年级、年龄和性别信息。以下是查找每个字母等级出现频率的方法:

 #create data
df = pd.DataFrame({'Grade': ['A','A','A','B','B', 'B', 'B', 'C', 'D', 'D '],
                   'Age': [18, 18, 18, 19, 19, 20, 18, 18, 19, 19],
                   'Gender': ['M','M', 'F', 'F', 'F', 'M', 'M', 'F', 'M', 'F']})

#view data
df

	Grade Age Gender
0 to 18 m
1 to 18 m
2 A 18 F
3 B 19 F
4 B 19 F
5 B 20 M
6 B 18 M
7 C 18 F
8 D 19 M
9 D 19 F 	  

#find frequency of each letter grade
pd.crosstab(index=df[' Grade '], columns=' count ')

col_0 count
Grade	
At 3
B4
C 1
D 2

对此的解释方法是:

  • 班上有3 名学生获得“A”。
  • 班上有4 名学生获得“B”。
  • 1 名学生在班级中获得“C”。
  • 班上有2 名学生获得“D”。

我们可以使用类似的语法来查找其他列的频率计数。例如,以下是如何按年龄查找频率的方法:

 pd.crosstab(index=df[' Age '], columns=' count ') 

col_0 count
Age	
18 5
19 4
20 1

对此的解释方法是:

  • 5名学生均为18岁。
  • 4名学生均为19岁。
  • 1名学生20岁。

您还可以通过除以总和来轻松地将频率显示为数据集的比例:

 #define crosstab
tab = pd.crosstab(index=df['Age'], columns='count')

#find proportions 
tab/tab.sum()

col_0 count
Age	
18 0.5
19 0.4
20 0.1

对此的解释方法是:

  • 50%的学生年龄在18岁。
  • 40%的学生年龄在19岁。
  • 10%的学生年龄在20岁。

DataFrame 的双向频率表

您还可以创建双向频率表来显示数据集中两个不同变量的频率。例如,以下是如何为 Age 和 Grade 变量创建双向频率表:

 pd.crosstab(index=df[' Age '], columns=df[' Grade '])


Grade A B C D
Age				
18 3 1 1 0
19 0 2 0 2
20 0 1 0 0

对此的解释方法是:

  • 班上有3 名18 岁的学生获得“A”。
  • 班上有1 名学生,年龄为 18 岁,成绩为“B”。
  • 班上有1 名学生,年龄为 18 岁,获得“C”级。
  • 班上有0名 18 岁学生获得“D”。

等等。

您可以在此处找到crosstab()函数的完整文档。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注