首页 > 解决方案 > 用熊猫计算点

问题描述

我被困在如何到达我的目的地。我有学生积分。我想对其进行编码,以便在所有科目中,只能从选定的 4 个科目中计算出学生的分数。前 2 门科目为必修科目。在剩下的部分中,您必须在“BIO”和“PHY”之间选择一个,具体取决于哪个得分高。在剩下的三个科目中,您只能选择 1 个,“GEO”、“CRE”或“HIS”取决于哪个科目得分高。

这是我编码的,没有给我我的结果。

sums = df['ENG']+df['KIS']+df['BIO']+df['PHY']+df['HIS']+df['GEO']+df['CRE']
if 'BIO' >='PHY':
    sum = (sums) - (df['PHY'])
else:
    sum = (sums) - (df['BIO'])
if 'GEO'>='CRE':
    sum = (sums) - (df['CRE'])
else:
    sum = (sums) - (df['GEO'])
if 'CRE'>='HIS':
    sum = (sums) - (df['CRE'])
else:
    sum = (sums) - (df['HIS'])
df['POINTS'] = sum
print(df)

样本数据在这里。

df = pd.DataFrame({'ENG':[10,3,5,6,3],'KIS':[9,5,7,9,10],'BIO':[11,3,4,6,4],'PHY':[5,3,9,10,2],'HIS':[7,12,9,7,8],'GEO':[2,7,6,11,7],'CRE':[8,3,6,8,10]})

根据这些数据,预期结果将是

   ENG  KIS  BIO  PHY  HIS  GEO  CRE  POINTS
   10    9   11    5    7    2    8      38
    3    5    3    3   12    7    3      23
    5    7    4    9    9    6    6      30
    6    9    6   10    7   11    8      36
    3   10    4    2    8    7   10      27

标签: pythonpandasdataframe

解决方案


df['POINTS'] = df['ENG'] + df['KIS'] + df[['BIO', 'PHY']].max(axis=1) + df[['HIS', 'GEO', 'CRE']].max(axis=1)

 ENG  KIS  BIO  PHY  HIS  GEO  CRE  POINTS
  10    9   11    5    7    2    8      38
   3    5    3    3   12    7    3      23
   5    7    4    9    9    6    6      30
   6    9    6   10    7   11    8      36
   3   10    4    2    8    7   10      27

推荐阅读