📅  最后修改于: 2023-12-03 15:12:18.869000             🧑  作者: Mango
熊猫是Python的一个流行的数据分析库,它有一个很实用的功能是 groupby
,用于根据指定的键(例如某一列)对数据进行分组,并执行聚合操作(例如求和)。但是有时候我们需要在 groupby
之后进行筛选,即过滤某些不需要的组,本文将介绍如何使用熊猫进行 groupby
之后的筛选。
让我们首先使用熊猫生成一个包含 姓名
、性别
、科目
、成绩
的数据框:
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六', '钱七'] * 2,
'性别': ['男', '女'] * 5,
'科目': ['语文', '数学'] * 5,
'成绩': np.random.randint(60, 100, size=10),
})
print(df)
输出:
姓名 性别 科目 成绩
0 张三 男 语文 64
1 李四 女 数学 67
2 王五 男 语文 67
3 赵六 女 数学 89
4 钱七 男 语文 88
5 张三 女 数学 95
6 李四 男 语文 63
7 王五 女 数学 81
8 赵六 男 语文 66
9 钱七 女 数学 82
接下来,我们按 姓名
分组,求出每个人的平均成绩:
grouped = df.groupby('姓名')
mean_scores = grouped['成绩'].mean()
print(mean_scores)
输出:
姓名
张三 79.5
李四 65.0
王五 74.0
赵六 77.5
钱七 85.0
Name: 成绩, dtype: float64
接下来,我们需要过滤平均成绩低于70分的人。可以按以下步骤进行:
groupby
分组;filter
方法过滤出符合条件的组。filtered = grouped.filter(lambda x: x['成绩'].mean() >= 70)
print(filtered)
输出:
姓名 性别 科目 成绩
0 张三 男 语文 64
2 王五 男 语文 67
4 钱七 男 语文 88
5 张三 女 数学 95
7 王五 女 数学 81
9 钱七 女 数学 82
可以看到,只剩下了平均成绩大于等于70分的学生。
以上就是过滤 groupby
的方法,其中 grouped.filter()
接受一个返回 True
或 False
的函数作为参数,如果该函数返回 True
,则保留该组数据,否则过滤掉该组数据。