这个问题Calculate points with pandas不能很好地说明我想问的问题,所以我在这里问。 我在这里有这些数据
df = pd.DataFrame({'ENG':[10,3,5,6,3],'KIS':[9,5,7,9,10],'BIO':[10,'',4,'',4],'PHY':[9,5,'',10,12],'HIS':['','',9,7,8],'GEO':['',7,'',11,''],'CRE':[8,3,6,'','']})
我的程序是计算数据中每个人的分数,仅从5个完成的主题中选择4个。 前两个科目是必修课。为了使其他两个科目相加以获得所需的4个科目,请在其余科目之间权衡,从中选择表现最佳的科目。
我的预期结果如下。
ENG KIS BIO PHY HIS GEO CRE POINTS
10 9 10 9 8 38
3 5 5 7 3 20
5 7 4 9 6 27
6 9 10 7 11 36
3 10 4 12 8 25
这是我尝试过的
a = df['ENG'] + df['KIS'] + df[['BIO', 'PHY']].fillna(0).max(axis=1) + df[['HIS', 'GEO', 'CRE']].fillna(0).max(axis=1)
df['POINTS'] = a
print(df)
答案 0 :(得分:1)
按值对每一行进行排序,然后选择最佳的两行并将其求和:
df = pd.DataFrame({'ENG':[10,3,5,6,3],'KIS':[9,5,7,9,10],'BIO':[10,'',4,'',4],'PHY':[9,5,'',10,12],'HIS':['','',9,7,8],'GEO':['',7,'',11,''],'CRE':[8,3,6,'','']})
df = df.replace('',0)
df[['BIO','PHY','HIS','GEO','CRE']].apply(lambda row: row.sort_values(ascending=False).head(2).sum() ,axis=1) + df['ENG'] + df['KIS']
0 38
1 20
2 27
3 36
4 33