这个问题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)发布于 2020-05-15 03:55:11
按值对每一行进行排序,然后选择最佳的两行并对其求和:
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 33https://stackoverflow.com/questions/61805973
复制相似问题