如何在 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()函数的完整文档。