pandas - 如何在熊猫中使用带有条件的聚合?
问题描述
我有一个数据框。以下代码有效
stat = working_data.groupby(by=['url', 'bucket_id'],
as_index=False).agg({'delta': 'max','id': 'count'})
现在我需要计算具有不同状态的 id。我的状态有“DOWNLOADED”、“NOT_DOWNLOADED”和“DOWNLOADING”。
我想有df
列bucket_id
,,max
(downloaded
有多少具有“DOWNLOADED”状态),not_downloaded
(有多少具有“NOT_DOWNLOADED”状态),downloading
(有多少具有“DOWNLOADING”状态)。怎么做?
输入我有: 。
输出我有:
如您所见,计数不按状态划分。但我想知道每个 bucket_id bucket_id 有 x 个下载,y not_downloaded,z 个下载(所以它们应该在单独的列中,但是一个 bucket_id 的信息应该在一行中)
解决方案
一种使用分配创建列然后聚合这个新列的方法。
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'})
推荐阅读
- django - Angular“未捕获(承诺):ChunkLoadError:加载块 12 失败。” 错误
- spring-boot - CORS 应该如何工作,Spring Boot 是否做对了?
- jspdf - JSPFD 删除行
- firebase - Firebase 删除用户数据扩展需要哪个实时数据库实例
- ruby - 如何在 Windows 10 中读取 utf8 编码的文件并输出?
- javascript - 我如何收听我的组件点击,因为我有一个 div 作为父级
- ios - 当应用程序打开且屏幕关闭时,Flutter FirebaseMessaging 消息未显示
- linux - .Net Core 3.1 在 Centos 7 上部署
- rust - 使用 h.264 编码时 Gstreamer encodebin 输出低比特率视频
- swift - 不创建新材料就无法修改材料