熊猫按两列分组,第三列输出值


colour    num    accepted  returned
grey      1      yes       no
red       2      no        no
grey      4      yes       yes

我有上面的数据帧,并希望输出colournum列的唯一组合以及returned中的相应值,如下所示

colour    num     returned
grey      1       no    
red       2       no      
grey      4       yes     

使用df.groupby(['colour', 'num']).size()给了我独特的组合,但没有returned列。

从您的描述中,我认为您也应该对returned列进行分组。

df.groupby(['colour','num','returned']).size() 这将显示每个返回状态的出现次数,按numcolour分组:

colour  num  returned
grey    1    no          1
4    yes         1
red     2    no          1

如果您确定颜色和数字的组合是唯一的,您可以执行以下操作:

df.groupby(['colour', 'num'])['returned'].max()

当然,如果它不是真正唯一的,并且同时存在"是"和"否",这将返回"是",因为"是">"否"......

但实际上,这个解决方案除了df[['colour','num','returned']].drop_duplicates()之外没有给出任何其他东西,这绝对更精简。

如果您以某种方式知道行可以重复,但返回值是唯一的,并且您希望同时显示它出现的次数和"返回"中的唯一值则可以一次性完成:

df.groupby(['colour','num'])['returned'].agg(['size','max'])

这将返回:

size    max
colour  num     
grey    1   1       no
4   1       yes
red     2   1       no

最新更新