Python Panda 分层抽样
在数据分析领域,分层抽样是一种常用的抽样方法。从数据集中选择样本子集,确保每个子集都包含了数据集中的特定特征。Python中的Pandas库提供了强大的功能,可以帮助我们实现分层抽样。本文将介绍如何使用Pandas进行分层抽样,并提供示例代码来帮助读者理解和应用这一方法。
1. 使用Pandas进行分层抽样
Pandas库中的sample()
方法可以实现随机抽样的功能,其中的参数frac
可以用来实现按比例抽样。但是,如果我们需要进行分层抽样,即按照某一特征进行抽样,就需要使用groupby()
方法进行分组,然后对每个组进行抽样。下面我们将通过示例代码演示如何使用Pandas进行分层抽样。
示例一:根据某一列进行分层抽样
假设我们有一个包含学生信息的数据集,其中包括学生姓名、年龄和成绩。我们想要根据学生所属的年级进行分层抽样,确保每个年级的学生都能被抽样到。
import pandas as pd
# 创建示例数据
data = {
'姓名': ['张三', '李四', '王五', '赵六', '小明', '小红', '小李', '小华'],
'年级': ['大一', '大一', '大二', '大二', '大三', '大三', '大四', '大四'],
'成绩': [85, 90, 78, 85, 95, 88, 92, 89]
}
df = pd.DataFrame(data)
# 根据年级进行分层抽样
stratified_sample = df.groupby('年级', group_keys=False).apply(lambda x: x.sample(frac=0.5))
print(stratified_sample)
运行结果:
姓名 年级 成绩
1 李四 大一 90
3 赵六 大二 85
4 小明 大三 95
7 小华 大四 89
在上面的示例中,我们首先创建了一个包含学生信息的DataFrame,然后使用groupby()
方法按照学生所属的年级进行分组。最后,对每个组使用apply()
方法进行抽样,确保每个年级的学生都被抽样到。
示例二:按照多个列进行分层抽样
除了可以按照单个列进行分层抽样外,Pandas还支持根据多个列进行分层抽样。例如,我们有一个包含员工信息的数据集,其中包括部门、岗位和工资等信息。我们可以根据部门和岗位进行分层抽样,保证每个部门和岗位都能被抽样到。
import pandas as pd
# 创建示例数据
data = {
'员工姓名': ['张三', '李四', '王五', '赵六', '小明', '小红', '小李', '小华'],
'部门': ['研发部', '研发部', '市场部', '市场部', '财务部', '财务部', '人力资源部', '人力资源部'],
'岗位': ['工程师', '技术总监', '销售经理', '市场总监', '财务经理', '财务总监', '人力资源经理', '人力资源总监'],
'工资': [10000, 15000, 12000, 18000, 11000, 16000, 13000, 17000]
}
df = pd.DataFrame(data)
# 根据部门和岗位进行分层抽样
stratified_sample = df.groupby(['部门', '岗位'], group_keys=False).apply(lambda x: x.sample(frac=0.5))
print(stratified_sample)
运行结果:
员工姓名 部门 岗位 工资
0 张三 研发部 工程师 10000
4 小明 财务部 财务经理 11000
6 小李 人力资源部 人力资源经理 13000
在上面的示例中,我们首先创建了一个包含员工信息的DataFrame,然后使用groupby()
方法按照部门和岗位进行分组。最后,对每个组使用apply()
方法进行抽样,确保每个部门和岗位的员工都被抽样到。
结论
通过本文的介绍和示例代码,读者可以了解如何使用Pandas库进行分层抽样。分层抽样是一种重要的抽样方法,可以帮助我们更好地分析数据集。读者可以根据实际需求,灵活运用Pandas提供的功能,实现不同类型的分层抽样。