pandas按某2列进行分层随机抽样的实现

 更新时间:2024年12月31日 10:52:38   作者:frostjsy  
本文主要介绍了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 BeautifulSoup中文乱码问题的2种解决方法

    Python BeautifulSoup中文乱码问题的2种解决方法

    这篇文章主要介绍了Python BeautifulSoup中文乱码问题的2种解决方法,需要的朋友可以参考下
    2014-04-04
  • python cookielib 登录人人网的实现代码

    python cookielib 登录人人网的实现代码

    今天晚上不是很忙,所以早早的就在电脑的旁边开始写东西了。我今天给大家分享一个我自己用python写的自动登录 人人网的脚本,没办法就是懒!懒的输入帐号和密码,让python给我们减少工作量
    2012-12-12
  • tensorflow之如何使用GPU而不是CPU问题

    tensorflow之如何使用GPU而不是CPU问题

    这篇文章主要介绍了tensorflow之如何使用GPU而不是CPU问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python实现PDF表格转CSV的完整方法与代码解析

    Python实现PDF表格转CSV的完整方法与代码解析

    PDF 格式因其版式固定性而广泛用于文档交换,但也导致结构化数据(如表格)难以直接抽取,本文将介绍如何使用免费库 Free Spire.PDF for Python 解析 PDF 表格,并结合 Python 内置 csv 标准库完成数据导出,有需要的可以了解下
    2026-06-06
  • 使用Python操作MySQL数据库的教程详解

    使用Python操作MySQL数据库的教程详解

    在这篇文章中,主要为大家详细介绍如何在Python中使用pymysql模块来操作MySQL数据库,文中的示例代码简介易懂,需要的小伙伴可以跟随小编一起学习一下
    2023-07-07
  • Python Selenium自动化实现网页操控

    Python Selenium自动化实现网页操控

    Selenium 是一个用于 Web 应用程序测试的工具,支持多种浏览器,下面我们就来看看Python如何使用Selenium实现自动化操作网页吧
    2025-08-08
  • Python利用ROI进行图像合成的问题小结

    Python利用ROI进行图像合成的问题小结

    图像的 ROI (region of interest) 是指图像中感兴趣区域、在 OpenCV 中图像设置图像 ROI 区域,实现只对 ROI 区域操作,本文给大家介绍Python利用ROI进行图像合成的问题小结,感兴趣的朋友一起看看吧
    2021-07-07
  • Python TCPServer 多线程多客户端通信的实现

    Python TCPServer 多线程多客户端通信的实现

    这篇文章主要介绍了Python TCPServer 多线程多客户端通信的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • numpy.sum()坐标轴问题的解决

    numpy.sum()坐标轴问题的解决

    本文主要介绍了numpy.sum()坐标轴问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • pytorch 如何使用float64训练

    pytorch 如何使用float64训练

    这篇文章主要介绍了pytorch 使用float64训练的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05

最新评论