首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas Python条件

Pandas Python条件
EN

Stack Overflow用户
提问于 2018-08-03 04:44:08
回答 5查看 76关注 0票数 3
代码语言:javascript
复制
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以上的人

EN

回答 5

Stack Overflow用户

发布于 2018-08-03 04:47:41

groupby就是你想要的

代码语言:javascript
复制
grouped = data.groupby('Name').min()
print(grouped.loc[grouped['Score']>80].index[0])

这将会给你

代码语言:javascript
复制
Out[1]: ['C']
票数 3
EN

Stack Overflow用户

发布于 2018-08-03 04:52:04

您可以在groupby之后使用filter,例如:

代码语言:javascript
复制
print (data.groupby('Name').filter(lambda x: (x['Score'].min()>80)))

然后你就会得到

代码语言:javascript
复制
  Course Name Number  Score
5    Eng    C   0003     81
6    Geo    C   0003    100
7    Bio    C   0003     90
票数 3
EN

Stack Overflow用户

发布于 2018-08-03 04:52:08

all中使用transform

代码语言:javascript
复制
data.loc[data.Score.gt(80).groupby(data['Name']).transform('all'),'Name'].unique()
Out[9]: array(['C'], dtype=object)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51661893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档