如何在Pandas中执行SUMIF函数

  • Post category:Python

在 Pandas 中可以使用 groupby 和 sum 函数来实现 SUMIF 函数的功能。

假设有一个数据集,包含学生的姓名和他们的成绩,如下所示:

姓名 成绩
张三 78
李四 92
王五 85
李四 80
王五 90
张三 88

可以使用 Pandas 将这个数据集读入 DataFrame:

import pandas as pd

data = {'姓名': ['张三', '李四', '王五', '李四', '王五', '张三'],
        '成绩': [78, 92, 85, 80, 90, 88]}

df = pd.DataFrame(data)

这个数据集中有三个学生,每个学生有两个成绩,现在要求出每个学生的平均成绩。

第一步是将数据集按照姓名分组:

grouped = df.groupby('姓名')

然后可以对每个分组使用 sum 函数求和,再除以该分组中数据的个数:

result = grouped.sum() / grouped.count()

这样就得到了每个学生的平均成绩:

           成绩
姓名          
张三  83.000000
李四  86.000000
王五  87.500000

完整代码如下:

import pandas as pd

data = {'姓名': ['张三', '李四', '王五', '李四', '王五', '张三'],
        '成绩': [78, 92, 85, 80, 90, 88]}

df = pd.DataFrame(data)
grouped = df.groupby('姓名')
result = grouped.sum() / grouped.count()
print(result)

对于更复杂的数据集,也可以使用类似的方法求出 SUMIF 函数的值。只需要在分组时加入条件即可。例如,假设数据集中还有一个班级的信息,可以按照班级和姓名分组,求出每个班级中每个学生的平均成绩:

import pandas as pd

data = {'班级': ['一班', '一班', '一班', '二班', '二班', '二班'],
        '姓名': ['张三', '李四', '王五', '李四', '王五', '张三'],
        '成绩': [78, 92, 85, 80, 90, 88]}

df = pd.DataFrame(data)
grouped = df.groupby(['班级', '姓名'])
result = grouped.sum() / grouped.count()
print(result)

输出结果如下:

               成绩
班级 姓名          
一班 李四  92.000000
   张三  83.000000
   王五  85.000000
二班 李四  80.000000
   张三  88.000000
   王五  90.000000

其中,每个行表示一个学生在某个班级中的平均成绩。