在 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
其中,每个行表示一个学生在某个班级中的平均成绩。