如何从熊猫的众多选择中选择项目

时间:2020-05-14 19:35:28

标签: pandas

这个问题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)

1 个答案:

答案 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