pandas按某2列进行分层随机抽样的实现
在某些情况下,你可能需要按多列组合后的分组进行分层随机抽样。pandas 提供了灵活的数据操作方法,你可以使用 groupby
和 apply
方法结合 sample
来实现这种需求。具体来说,你可以先按多列分组,然后对每个分组进行随机抽样。
示例数据
首先,创建一个包含两列的数据 DataFrame:
import pandas as pd # 创建一个示例 DataFrame data = { 'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah', 'Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah'], 'age': [25, 30, 35, 40, 45, 50, 55, 60, 25, 30, 35, 40, 45, 50, 55, 60], 'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego', 'New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego'], 'department': ['HR', 'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR', 'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR', 'Finance'] } df = pd.DataFrame(data) print(df) # 输出: # name age city department # 0 Alice 25 New York HR # 1 Bob 30 Los Angeles Finance # 2 Charlie 35 Chicago IT # 3 David 40 Houston Marketing # 4 Eve 45 Phoenix Sales # 5 Frank 50 Philadelphia R&D # 6 Grace 55 San Antonio Admin # 7 Hannah 60 San Diego HR # 8 Alice 25 New York Finance # 9 Bob 30 Los Angeles IT # 10 Charlie 35 Chicago Marketing # 11 David 40 Houston Sales # 12 Eve 45 Phoenix R&D # 13 Frank 50 Philadelphia Admin # 14 Grace 55 San Antonio HR # 15 Hannah 60 San Diego Finance
按两列分组并进行分层随机抽样
假设你希望按 city
和 department
列进行分组,并从每个组中随机抽取一个样本。你可以这样实现:
import pandas as pd # 创建一个示例 DataFrame data = { 'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah', 'Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah'], 'age': [25, 30, 35, 40, 45, 50, 55, 60, 25, 30, 35, 40, 45, 50, 55, 60], 'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego', 'New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego'], 'department': ['HR', 'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR', 'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR', 'Finance'] } df = pd.DataFrame(data) print(df) # 按 'city' 和 'department' 列分组,并对每个分组随机抽取 1 行 sampled_df = df.groupby(['city', 'department']).apply(lambda x: x.sample(n=1, random_state=42)).reset_index(drop=True) print(sampled_df)
具体步骤说明
- 按多列进行分组:使用
groupby(['city', 'department'])
按city
和department
两列进行分组。 - 对每个分组随机抽样:使用
apply
和lambda
函数对每个分组调用sample(n=1)
随机抽取一行。random_state
参数用于设置随机种子,以确保结果可重现。 - 重置索引:使用
reset_index(drop=True)
重置索引,以避免保留分组键的索引信息。
输出示例
根据样本数据的不同,输出可能会有所差异。以下是一个可能的输出示例:
name age city department
0 Alice 25 Los Angeles Finance
1 Charlie 35 Chicago IT
2 Frank 50 Philadelphia R&D
3 Hannah 60 San Diego Finance
4 Bob 30 Houston Marketing
5 Grace 55 San Antonio HR
6 Alice 25 New York HR
7 Eve 45 Phoenix Sales
8 David 40 Houston Sales
9 Charlie 35 Chicago Marketing
10 Hannah 60 San Diego HR
11 Grace 55 San Antonio Admin
12 Bob 30 Los Angeles IT
13 David 40 New York Finance
14 Eve 45 Phoenix R&D
15 Frank 50 Philadelphia Admin
这样,你可以轻松地对 DataFrame 中的多列进行分组,并从每个分组中进行分层随机抽样。这种技术在数据分析和机器学习中非常有用,可以帮助你从大数据集中获得具有代表性的小样本进行分析。
到此这篇关于pandas按某2列进行分层随机抽样的实现的文章就介绍到这了,更多相关pandas 某2列分层随机抽样内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
这篇文章主要介绍了python+opencv3.4.0 实现HOG+SVM行人检测的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01从零学python系列之新版本导入httplib模块报ImportError解决方案
在使用新版python打开旧版本代码的时候,可能会有些报错或者不兼容的情况出现,今天我们就来分析其中的一种情况2014-05-05Python异常处理:try、except、else、finally的全面解析
在Python中,异常是程序在运行时发生的错误,当Python解释器遇到一个它不能处理的错误时,它会抛出一个异常,异常处理的主要目的是在程序遇到错误时,提供一种方法来处理这些错误,而不是简单地让程序崩溃,本文介绍了Python异常处理:try、except、else、finally的全面解析2024-07-07
最新评论