Pandas分组统计
本文介绍的是pandas库中如何实现数据的分组统计:
- 不去重的分组统计,类似SQL中统计次数
- 去重的分组统计,类型SQL的统计用户数,需要去重
模拟数据1
本文案例的数据使用的是numpy
库随机生成数据:
1 | name_list = ["小明","小红","张三","李四","王五","小孙","小周"] # 姓名 |
检查数据是否重复
因为数据是随机生成的,我们需要检查是否有出现这种情况:name、subject、time、grade4个字段相同,但是score出现了两次,防止数据不规范。写了一个循环来进行判断:
1 | # 写个循环判断是否有重复行的数据 |
果然有上述不满足要求的数据:
报错解决
我们把小红的这物理学科在3年级下学期的成绩找出来:当使用and
连接多个条件的时候会出现如下的报错!!!
将每个条件用()
单独包裹起来,同时and
需要改成&
即可解决:
成功解决!这个报错是很常见的
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
统计每个学生出现次数
统计某位同学的成绩次数
- 找出张三同学的全部成绩
- 统计张三成绩出现的次数
统计每个科目有多少同学出现
需要进行去重统计:
1 | data.groupby("subject")["name"].nunique() # 去重统计 |
模拟数据2
数据
1 | import pandas as pd |
分组统计方法1
直接使用groupby
函数和nunique
方法:
分组统计方法2
整体方法说明:
分步骤解释:
1、找出数据不是null的值
2、统计para参数中的唯一值
1 | type(df1) # df1的类型是Series型数据 |
3、使用from_records
方法来生成数据
4、通过stack方法进行翻转
from_records方法
下面记录pandas中from_records
方法的使用:
参数
1 | DataFrame.from_records(data, index=None, exclude=None, columns=None, coerce_float=False, nrows=None)[source] |
Convert structured or record ndarray to DataFrame.
Creates a DataFrame object from a structured ndarray, sequence of tuples or dicts, or DataFrame.
案例
使用的案例来自官网:
去重与汇总统计
比如对用户去重和金额汇总的同时统计方法:
1 | import pandas as pd |