为了账号安全,请及时绑定邮箱和手机立即绑定

有条件的Pandas Python

有条件的Pandas Python

小怪兽爱吃肉 2021-05-13 18:09:12
d = [{'Number':'0001',  'Name':'A','Course':'Eng','Score':81 },{'Number':'0001',  'Name':'A','Course':'Geo','Score':75},       {'Number':'0002',  'Name':'B','Course':'Eng','Score': 76} , {'Number':'0002',  'Name':'B','Course':'Geo','Score':90 },    {'Number':'0003',  'Name':'C','Course':'Eng','Score':81 },{'Number':'0003',  'Name':'C','Course':'Geo','Score':100, },     {'Number':'0003',  'Name':'C','Course':'Bio','Score':90 }]data = pd.DataFrame(d, index=[1,2,3,4,5,6,7])dataCourse  Name    Number  Score1   Eng A   0001    812   Geo A   0001    753   Eng B   0002    764   Geo B   0002    905   Eng C   0003    816   Geo C   0003    1007   Bio C   0003    90我想要的是只返回名字C,因为C是唯一一个在每个主题上得分都超过80的人
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以使用filter后groupby如:


print (data.groupby('Name').filter(lambda x: (x['Score'].min()>80)))

你得到


  Course Name Number  Score

5    Eng    C   0003     81

6    Geo    C   0003    100

7    Bio    C   0003     90


查看完整回答
反对 回复 2021-05-18
?
慕少森

TA贡献2019条经验 获得超9个赞

一个groupby就是你想要的


grouped = data.groupby('Name').min()

print(grouped.loc[grouped['Score']>80].index[0])

这会给你


Out[1]: ['C']


查看完整回答
反对 回复 2021-05-18
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信