📅  最后修改于: 2023-12-03 15:24:44.330000             🧑  作者: Mango
有时候我们需要将数据表中的分类变量存储在单独的数据框中,例如制作交叉表或者进行统计分析时。本文将介绍在 Python 中如何将分类变量存储在单独的数据框中。
我们使用 Pandas 中的 pd.read_csv()
函数读取一个包含分类变量的数据集。假设数据集长这样:
import pandas as pd
data = pd.DataFrame({'name': ['John', 'Mary', 'Anne', 'Peter', 'Bob', 'Linda', 'David', 'Jeff'],
'age': [23, 45, 31, 18, 27, 36, 29, 41],
'gender': ['F', 'F', 'F', 'M', 'M', 'F', 'M', 'M'],
'education': ['Bachelor', 'Master', 'PhD', 'Bachelor', 'Master', 'Bachelor', 'PhD', 'Master']})
print(data)
输出为:
name age gender education
0 John 23 F Bachelor
1 Mary 45 F Master
2 Anne 31 F PhD
3 Peter 18 M Bachelor
4 Bob 27 M Master
5 Linda 36 F Bachelor
6 David 29 M PhD
7 Jeff 41 M Master
数据集中包含 4 个变量,其中 gender
和 education
是分类变量。
我们可以使用 Pandas 中的 groupby()
函数将数据按分类变量分组,并将每个组存储在一个单独的数据框中。具体步骤如下:
groups = data.groupby(['gender', 'education'])
dfs = [group.drop('gender', axis=1).reset_index(drop=True) for name, group in groups]
names = ['_'.join(name) for name in list(groups.groups.keys())]
result = dict(zip(names, dfs))
for name, df in result.items():
print(name)
print(df)
代码的具体步骤如下:
groupby()
函数将数据按 gender
和 education
分组,创建一个包含所有组的迭代器。gender
列移除并重置行索引,然后将结果存储到一个列表中。group.groups.keys()
获取所有组的名称。输出结果为:
F_Bachelor
name age education
0 John 23 Bachelor
1 Linda 36 Bachelor
F_Master
name age education
0 Mary 45 Master
F_PhD
name age education
0 Anne 31 PhD
M_Bachelor
name age education
0 Peter 18 Bachelor
M_Master
name age education
0 Bob 27 Master
1 Jeff 41 Master
M_PhD
name age education
0 David 29 PhD
可以看到,我们成功将分类变量存储在了单独的数据框中。每个数据框的名称由 gender
和 education
组成,用 _
连接。数据框中不包含 gender
列。
本文介绍了如何将分类变量存储在单独的数据框中。具体步骤包括使用 Pandas 中的 groupby()
函数按分类变量分组,并将每个组存储在一个单独的数据框中。