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+pygame开发消消乐游戏附完整源码

    使用python+pygame开发消消乐游戏附完整源码

    消消乐小游戏相信大家都玩过,大人小孩都喜欢玩的一款小游戏,那么基于程序是如何实现的呢?今天带大家,用python+pygame来实现一下这个花里胡哨的消消乐小游戏功能,感兴趣的朋友一起看看吧
    2021-06-06
  • python利用pandas和csv包向一个csv文件写入或追加数据

    python利用pandas和csv包向一个csv文件写入或追加数据

    这篇文章主要给大家介绍了关于python利用pandas和csv包向一个csv文件写入或追加数据的相关资料,我们越来越多的使用pandas进行数据处理,有时需要向一个已经存在的csv文件写入数据,需要的朋友可以参考下
    2023-07-07
  • Python搭建Keras CNN模型破解网站验证码的实现

    Python搭建Keras CNN模型破解网站验证码的实现

    这篇文章主要介绍了Python搭建Keras CNN模型破解网站验证码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • python tkinter实现屏保程序

    python tkinter实现屏保程序

    这篇文章主要为大家详细介绍了python tkinter实现屏保程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • python写日志文件操作类与应用示例

    python写日志文件操作类与应用示例

    这篇文章主要介绍了python写日志文件操作类与应用,结合实例形式分析了Python日志文件操作类的定义与使用相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • python AutoViz库一行代码实现可视化数据集

    python AutoViz库一行代码实现可视化数据集

    这篇文章主要介绍了python AutoViz库一行代码实现可视化数据集实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python批量按比例缩小图片脚本分享

    Python批量按比例缩小图片脚本分享

    这篇文章主要介绍了Python批量按比例缩小图片脚本分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-05-05
  • pyqt 多窗口之间的相互调用方法

    pyqt 多窗口之间的相互调用方法

    今天小编就为大家分享一篇pyqt 多窗口之间的相互调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 使用Python的xlrd和xlwt操作Excel详解

    使用Python的xlrd和xlwt操作Excel详解

    这篇文章主要介绍了使用Python的xlrd和xlwt对比操作Excel详解,xlrd和xlwt是python的第三方库,xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入,需要的朋友可以参考下
    2023-08-08
  • Python-openCV读RGB通道图实例

    Python-openCV读RGB通道图实例

    今天小编就为大家分享一篇Python-openCV读RGB通道图实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论