pandas操作复习_05_添加求和列并求值
前情提要
在第04节插入了一段描写pandas删除操作的小节。如此,我们已经完成了以下部分的内容了:
- 表格的连接
- 表格中columns的移动
- 表格行列的删除
接下来,就需要进行计算总分了。计算总分涉及到两个部分,一个是在表格中添加一个新的列,二是进行逐行的求和运算。
数据准备
这里仍然使用03节中最后生成的score.xlsx。其数据展示如下:即便没有原始数据,也可以复制以下数据进一个xlsx表格中即可
学号 | 姓名 | 班级 | 语文 | 数学 | 英语 | 音乐 | 美术 | 体育 | |
---|---|---|---|---|---|---|---|---|---|
0 | A01 | 饶秀颖 | 1班 | 35 | 45 | 55 | 95 | 95 | 95 |
1 | A02 | 于俊远 | 1班 | 38 | 53 | 46 | 97 | 98 | 95 |
2 | A03 | 王五 | 1班 | 54 | 46 | 38 | 97 | 99 | 97 |
3 | A08 | 冉颇 | 3班 | 34 | 54 | 60 | 96 | 98 | 99 |
4 | A09 | 夫余岚裳 | 3班 | 43 | 57 | 67 | 98 | 95 | 94 |
5 | A10 | 薛菁 | 3班 | 55 | 60 | 65 | 96 | 93 | 96 |
实际操作
导入模块
import pandas as pd
import numpy as np
import pathlib
指定文件
file_path = pathlib.Path("/content/drive/MyDrive/Notebooks_data/score.xlsx")
file_path
显示数据
data_source = pd.read_excel(file_path)
data_source
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 0 A01 饶秀颖 1班 35 45 55 95 95 95 1 A02 于俊远 1班 38 53 46 97 98 95 2 A03 王五 1班 54 46 38 97 99 97 3 A08 冉颇 3班 34 54 60 96 98 99 4 A09 夫余岚裳 3班 43 57 67 98 95 94 5 A10 薛菁 3班 55 60 65 96 93 96
制作副本方便操作
data1 = data_source.copy(deep=True)
加权求和解释
倘若只是简单的求和,只需要使用sum就好了,但是我们知道,文化课和素质课的成绩,我们不应当按照一样的比例。在这里,我们假设文化课每门各占30%,素质课三门加在一起占10%。
创建新列
创建空列直接在dataframe后面加一个中括号,括号内命名即可data1["sum"] = np.nan是很稳妥的做法
np是引入的numpy库
data1["sum"] = pd.Series(dtype=np.float64)
# 也可以使用以下段落,显得更简洁
# data1["sum"] = np.nan
遍历每一行进行同类型计算
现在我们知道要进行加权求和,那么我们以第一列为例,显然会得到这样的结果:
(35+45+55)x 30% +(95+95+95)x 10%
逐行的对感兴趣的列中的元素进行操作,主要借助到DataFrame中的.iterrows()和.loc[index, "列名"]。
其中.iterrows()获得dataframe中的行列。也可以根据row来指定列,但是这里习惯性的使用了.loc[index, 列名]
for index, row in data1.iterrows():
data1.loc[index, "sum"] = (data1.loc[index, "语文"] + data1.loc[index, "数学"] + data1.loc[index, "英语"]) * 0.3 + (data1.loc[index, "音乐"] + data1.loc[index, "美术"] + data1.loc[index, "体育"] * 0.1)
data1
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 sum 0 A01 饶秀颖 1班 35 45 55 95 95 95 240.0 1 A02 于俊远 1班 38 53 46 97 98 95 245.6 2 A03 王五 1班 54 46 38 97 99 97 247.1 3 A08 冉颇 3班 34 54 60 96 98 99 248.3 4 A09 夫余岚裳 3班 43 57 67 98 95 94 252.5 5 A10 薛菁 3班 55 60 65 96 93 96 252.6
保存数据
data1.to_excel("/content/drive/MyDrive/Notebooks_data/score.xlsx", index=False)
致谢链接
如何在pandas dataframe中创建一个空列
pandas按行遍历dataframe的几种方式
pandas通过index选择并获取行列