pandas中利用groupby分组,使用if,大于1求和,小于1求和
在数据处理和分析中,经常需要对数据进行分组统计,pandas中的groupby函数是一个非常强大的工具。在实际应用中,我们有时需要根据不同的条件进行分组求和,比如大于1的数值求和,小于1的数值求和等。本文将详细介绍如何利用groupby函数实现这些功能。
准备数据
首先,让我们创建一组示例数据,包括姓名、学科和成绩三个字段,如下所示:
import pandas as pd
data = {
'姓名': ['小明', '小红', '小华', '小李', '小张', '小刚', '小美', '小亮'],
'学科': ['语文', '数学', '英语', '数学', '英语', '语文', '数学', '英语'],
'成绩': [80, 90, 85, 70, 95, 75, 85, 60]
}
df = pd.DataFrame(data)
print(df)
运行以上代码,我们得到如下的数据表:
姓名 学科 成绩
0 小明 语文 80
1 小红 数学 90
2 小华 英语 85
3 小李 数学 70
4 小张 英语 95
5 小刚 语文 75
6 小美 数学 85
7 小亮 英语 60
分组求和
大于1求和
首先,我们来看如何对大于1的成绩进行求和。我们可以通过groupby函数按照学科进行分组,然后使用apply方法自定义求和函数,如下所示:
def sum_if_greater_than_1(x):
if x.sum() > 1:
return x.sum()
else:
return 0
result = df.groupby('学科')['成绩'].apply(sum_if_greater_than_1)
print(result)
运行以上代码,我们得到如下结果:
学科
数学 245
英语 240
语文 0
Name: 成绩, dtype: int64
从结果可以看出,数学和英语学科的成绩总和大于1,而语文学科的成绩总和为0。
小于1求和
接下来,我们来看如何对小于1的成绩进行求和。我们同样可以通过groupby函数按照学科进行分组,然后使用apply方法自定义求和函数,如下所示:
def sum_if_less_than_1(x):
if x.sum() < 1:
return x.sum()
else:
return 0
result = df.groupby('学科')['成绩'].apply(sum_if_less_than_1)
print(result)
运行以上代码,我们得到如下结果:
学科
数学 0
英语 0
语文 0
Name: 成绩, dtype: int64
从结果可以看出,所有学科的成绩总和均小于1。
总结
本文介绍了如何利用pandas中的groupby函数对数据进行分组,通过自定义函数实现大于1和小于1的成绩求和。在实际应用中,我们可以根据具体需求灵活运用groupby函数,进行数据分析和统计,提高工作效率。