Python Pandas 数据分组

在数据处理中,分箱、分组是一种常见的技术,用于将连续数据的间隔分组到“箱”或“桶”中。我们将讨论以下两种方法:

  1. 使用 Pandas 的 betweenloc 方法:

    • between 方法返回一个布尔向量,指示 Series 元素是否位于给定的边界值之间。

    • loc 方法用于根据条件选择数据。

    • 示例:将学生的分数分为等级 A、B 和 C。

    • 代码示例:

      import pandas as pd
      import numpy as np
      
      # 创建随机成绩score数据
      df = pd.DataFrame({'score': np.random.randint(0, 101, 1000)})
      
      
      print(df)
      ##########
         score
      0     56
      1     94
      2     89
      3     58
      4     29
      5     37
      6     63
      7     64
      8     82
      9     76
      ##########
      
      
      # 0~50分 成绩等级grade为C
      df.loc[df['score'].between(0, 50, inclusive='both'), 'grade'] = 'C'
      # 50~80分 成绩等级grade为B
      df.loc[df['score'].between(50, 80, inclusive='right'), 'grade'] = 'B'
      # 80~100分 成绩等级grade为A
      df.loc[df['score'].between(80, 100, inclusive='right'), 'grade'] = 'A'
      
      
      print(df)
      ##########
         score grade
      0     56     B
      1     94     A
      2     89     A
      3     58     B
      4     29     C
      5     37     C
      6     63     B
      7     64     B
      8     82     A
      9     76     B
      ##########
      
      
    • 查看每个等级的人数:df['grade'].value_counts()

      print(df['grade'].value_counts())
      ##########
      grade
      B    5
      A    3
      C    2
      ##########
      
  2. 使用 Pandas 的 cut 方法:

    • cut 方法将值分类为离散的间隔。

    • 示例:将分数分为等级 C、B 和 A。

    • 代码示例:

      bins = [0, 50, 80, 100]
      labels = ['C', 'B', 'A']
      # 分仓
      df['grade'] = pd.cut(x=df['score'], bins=bins, labels=labels, include_lowest=True)
      
      
      print(df)
      ##########
         score grade
      0     56     B
      1     94     A
      2     89     A
      3     58     B
      4     29     C
      5     37     C
      6     63     B
      7     64     B
      8     82     A
      9     76     B
      ##########
      
    • 查看每个等级的人数:df['grade'].value_counts()

      print(df['grade'].value_counts())
      ##########
      grade
      B    5
      A    3
      C    2
      ##########
      
posted @   TY520  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示