【发布时间】:2021-03-08 01:52:40
【问题描述】:
我正在尝试根据另一列的条目计算一列的值,我正在尝试使用 for 循环来实现这一点,我不知道如何返回整个列的值,而只是最后一次迭代,下面是我的代码示例,请帮助我找出我做错的地方。
def marks_calculation(Master_Sheet):
for a in Master_Sheet.Marks Condition:
if a == "Yes":
Master_Sheet['Total'] = Master_Sheet['Total Marks']*0.85
Master_Sheet.loc[(Master_Sheet['Total Marks'] > Master_Sheet['Basic1']) & (Master_Sheet['Total Marks'] <= Master_Sheet['Basic3']),'Total'] = (Master_Sheet['Basic1'] * Master_Sheet['Slab1']) + ((Master_Sheet['Total Marks'] - Master_Sheet['Basic1']) * Master_Sheet['Slab2'])
Master_Sheet.loc[(Master_Sheet['Total Marks'] > Master_Sheet['Basic2']),'Total'] = (Master_Sheet['Basic1'] * Master_Sheet['Slab1']) + ((Master_Sheet['Basic2'] - Master_Sheet['Basic1']) * Master_Sheet['Slab2']) + ((Master_Sheet['Total Marks'] - Master_Sheet['Basic2']) * Master_Sheet['Slab3'])
return Master_Sheet['Total']
else :
Master_Sheet['Total'] = Master_Sheet['Aggregated Marks']
return Master_Sheet['Total']
Master_Sheet['Total'] = Master_Sheet['Total'].replace("",0, regex=True)
Master_Sheet[['Students','Total Marks','Aggregated Marks','Marks Condition','Total']]
例如数据
Student Condition Aggregated TotalMarks Basic1 Basic2 Slab1 Slab2 Slab3 Total
A Yes 65.34 54.29 45 55 49% 64% 82% 28.00
B No 75.65 94.32 23 54 73% 81% 33% 75.65
C No 87.9 82.9 67 78 85% 54% 46% 87.90
D Yes 59.4 92.02 75 83 53% 71% 47% 47.59
E No 83.05 62.45 23 35 70% 35% 23% 83.05
这里只有在条件为是时才计算总计,如果为否,我们需要使用聚合中的数据。 如果 Condition 为 Yes,Total 的计算如下:
If(TotalMarksSlab1, If(AND(TotalMarks>Basic1, TotalMarksSlab1)+((TotalMarks-Basic1)Slab2) ,(Basic1Slab1)+((TotalMarks-Basic1)*Slab2)+((Basic2-TotalMarks)*Slab3)))
【问题讨论】:
-
我想坚持这种方法,为了可读性,np.where 有点复杂,根据我的要求,有什么办法可以使这个工作。
标签: python-3.x pandas dataframe for-loop if-statement