数据帧中的值之和取决于列

2024-10-05 14:23:27 发布

您现在位置: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

Tags: columns数据dataframedfnpresnanpd
1条回答
网友
1楼 · 发布于 2024-10-05 14:23:27

另一种方式:

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

相关问题 更多 >