myth_zy 2024-01-03 09:55 采纳率: 0%
浏览 10
已结题

如果用python实现对dataframe多列同时进行特定抽样数量的分层抽样?

如何按照图中所示的多个条件,对dataframe数据进行抽样,并计算不同抽样结果的个数?
补充:目的是从df数据中抽取满足图中三类分层条件和抽样数量的30个数据

img

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-01-03 10:03
    关注

    引自免费微信小程序:皆我百晓生

    要实现对dataframe多列同时进行特定抽样数量的分层抽样,可以按照以下步骤进行:

    1. 创建一个新的列来标识每一行的分层条件,可以使用apply函数和lambda表达式来实现多个条件的拼接。例如,对于"职位层级"和"工作时间"两列,可以使用以下代码创建一个新的列"分层条件":

      df['分层条件'] = df.apply(lambda row: row['职位层级'] + '_' + row['工作时间'], axis=1)
      
    2. 根据分层条件和抽样数量,计算每个条件应该抽样的数量。可以使用groupby函数和transform函数来实现。

      df['抽样数量'] = df.groupby('分层条件')['抽样数'].transform(lambda x: x.sum() if not x.empty else 0)
      
    3. 对于每个分层条件,根据抽样数量进行抽样。可以使用groupby函数和apply函数来实现。

      sampled_df = df.groupby('分层条件', group_keys=False).apply(lambda x: x.sample(min(len(x), x['抽样数量'].iloc[0])))
      
    4. 输出抽样结果和不同抽样结果的个数。

      print(sampled_df)  # 打印抽样结果
      print(sampled_df['分层条件'].value_counts())  # 打印不同抽样结果的个数
      

    注意:以上代码假设数据已经导入到名为df的dataframe中,且列名与图1中的内容相对应。请根据实际情况进行适当修改。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月3日
  • 修改了问题 1月3日
  • 赞助了问题酬金15元 1月3日
  • 创建了问题 1月3日