首页 > 解决方案 > 如何在熊猫中使用带有条件的聚合?

问题描述

我有一个数据框。以下代码有效

stat = working_data.groupby(by=['url', 'bucket_id'], 
                            as_index=False).agg({'delta': 'max','id': 'count'})

现在我需要计算具有不同状态的 id。我的状态有“DOWNLOADED”、“NOT_DOWNLOADED”和“DOWNLOADING”。

我想有dfbucket_id,,maxdownloaded有多少具有“DOWNLOADED”状态),not_downloaded(有多少具有“NOT_DOWNLOADED”状态),downloading(有多少具有“DOWNLOADING”状态)。怎么做?

输入我有: 在此处输入图像描述

输出我有: 在此处输入图像描述

如您所见,计数不按状态划分。但我想知道每个 bucket_id bucket_id 有 x 个下载,y not_downloaded,z 个下载(所以它们应该在单独的列中,但是一个 bucket_id 的信息应该在一行中)

标签: pandas

解决方案


一种使用分配创建列然后聚合这个新列的方法。

working_data.assign(downloaded=df['status'] == 'DOWNLOADED', 
                   not_downloaded=df['status'] == 'NOT_DOWNLOADED',
                   downloading=df['status'] == 'DOWNLOADING')\
            .groupby(by=['url', 'bucket_id'], 
                        as_index=False).agg({'delta': 'max',
                                             'id': 'count',
                                             'downloaded': 'sum',
                                             'not_donwloaded':'sum',
                                             'downloading':'sum'})

推荐阅读