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])
data
Course Name Number Score
1 Eng A 0001 81
2 Geo A 0001 75
3 Eng B 0002 76
4 Geo B 0002 90
5 Eng C 0003 81
6 Geo C 0003 100
7 Bio C 0003 90
我想要的是只返回名字C,因为C是唯一一个每个科目得分都在80以上的人
发布于 2018-08-03 04:47:41
groupby就是你想要的
grouped = data.groupby('Name').min()
print(grouped.loc[grouped['Score']>80].index[0])
这将会给你
Out[1]: ['C']
发布于 2018-08-03 04:52:04
您可以在groupby
之后使用filter
,例如:
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
发布于 2018-08-03 04:52:08
在all
中使用transform
data.loc[data.Score.gt(80).groupby(data['Name']).transform('all'),'Name'].unique()
Out[9]: array(['C'], dtype=object)
https://stackoverflow.com/questions/51661893
复制相似问题