我有一个具有以下结构的PANDAS数据框,例如:
id,sex,age,rank,skill
1,M,9,1,A
1,M,8,2,G
1,M,10,3,F
2,F,10,3,M
2,F,8,4,W
2,F,6,4,O
3,M,5,1,Q
3,M,4,3,N
3,M,9,4,Y
在对数据帧执行groupby / apply操作之后,我期望的输出是:
id,sex,age,rank,skill
1,M,8,1,A
2,F,6,3,M
3,M,4,1,Q
换句话说,我希望对id字段进行分组,性别字段不变,年龄值的min(),等级值的min()以及等级的min()处存在的技能值值。
我了解可以在dict中将多个agg函数传递给groupby,但是它不知道如何处理恒定值或取决于groupby另一个字段中函数结果的值。
最佳答案
在您预期的输出中,它是min
的rank
,但是在您的解释中您提到的是max
我的回答基于您的预期输出
df.groupby(['id','sex'],as_index=False).agg({'age':'min','rank':'min'}).\
merge(df.drop('age',1),on=['id','sex','rank'],how='left')
Out[931]:
id sex age rank skill
0 1 M 8 1 A
1 2 F 6 3 M
2 3 M 4 1 Q
关于python - 具有多种功能的PANDAS Group By,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45723048/