python - 根据列对数据框中的值求和
问题描述
假设我有以下数据框:
df = pd.DataFrame([[1, np.nan, 4, 5, 6, 7], [1, 3, 2, 1, np.nan, 8], [4, 6, 1, 1, 1, 4]], columns=['Student1', 'Student2', 'Student3', 'Exam1', 'Exam2', 'Exam3'])
>>> df
Student1 Student2 Student3 Exam1 Exam2 Exam3
0 1 NaN 4 5 6.0 7
1 1 3.0 2 1 NaN 8
2 4 6.0 1 1 1.0 4
仅当特定列中的值不是 nan 时,我才想对学生和考试的单元格求和。例如,对于第一行,我只能对 Student1 和 Student3(结果列 student_sum)以及 Exam1 和 Exam3 求和,因为 Student2 是空的,所以也不考虑 Exam2。我尝试使用 itertuples 进行迭代,但问题是它总结了所有内容。
结果应该是:
Student1 Student2 Student3 Exam1 Exam2 Exam3 Res_stud Res_exam
0 1 NaN 4 5 6.0 7 5 12
1 1 3.0 2 1 NaN 8 3 9
2 4 6.0 1 1 1.0 4 11 6
解决方案
另一种方式:
stu=df.filter(like='Student').columns
exam=df.filter(like='Exam').columns
#Grab Columns Name
最后将彼此相反的掩码传递给彼此:
df['Student_Sum']=df[stu].mask(df[exam].isna().values).sum(1)
df['Exam_Sum']=df[exam].mask(df[stu].isna().values).sum(1)
输出df
:
Student1 Student2 Student3 Exam1 Exam2 Exam3 Student_Sum Exam_Sum
0 1 NaN 4 5 6.0 7 5.0 12.0
1 1 3.0 2 1 NaN 8 3.0 9.0
2 4 6.0 1 1 1.0 4 11.0 6.0
推荐阅读
- sql - SAS SQL根据宏变量结果创建表
- c# - PMC 错误:术语“get-mgrations”未被识别为 cmdlet 的名称
- r - 我希望 r 在向量中安排/合并我的重采样
- android - 启动时未触发 BroadcastReceiver - 以编程方式
- c++ - 如何使用 boost.thread 运行多个接收器,每个线程应该为每个接收器分配?
- elasticsearch - 使用 RPM 存储库确定 Elasticsearch 次要版本
- angular - 获取单条记录数据AngularFireDatabase
- git - bitbucket 管道无限期地运行
- c# - 用于查找不在“”字符之间的单词的正则表达式
- awk - 如何通过 grep 命令在 gnuplot 中使用 for 循环