python - 使用熊猫,我如何对布尔列为真的求和案例进行分组/聚合?
问题描述
我有一个从数据库查询构造的 DataFrame。框架中的每一行都有一个数据库 ID、日期、工作、一个问题布尔值和一个固定布尔值。例如:
data = [
{'id': 1, 'date': '2020-02-01', 'job': 'ABC', 'issue': True, 'fixed': False},
{'id': 2, 'date': '2020-02-01', 'job': 'ABC', 'issue': False, 'fixed': False},
{'id': 3, 'date': '2020-02-01', 'job': 'ABC', 'issue': True, 'fixed': True},
{'id': 4, 'date': '2020-02-01', 'job': 'DEF', 'issue': True, 'fixed': True}
]
data_df = pd.DataFrame(data)
我想做一个我按工作groupby
和agg
日期分组的地方,并获得“问题”和“已修复”的数量为真。就像是:
result_data = [
{'date': '2020-02-01', 'job': 'ABC', 'issue': 2, 'fixed': 1},
{'date': '2020-02-01', 'job': 'DEF', 'issue': 1, 'fixed': 1}
]
result_df = pd.DataFrame(result_data)
代码看起来像:
result_df = data_df.groupby(['date', 'job']).agg({'issue': 'sum-true', 'fixed': 'sum-true'})
但我不确定'sum-true'
应该是什么。不,我不能只通过列为真过滤整个 DF,并求和,issue
可能是True
,fixed
而是False
。
解决方案
这个怎么样?
>>> df.groupby(['date', 'job'])[['issue', 'fixed']].sum()
issue fixed
date job
2020-02-01 ABC 2.0 1.0
DEF 1.0 1.0
简单地对布尔向量求和将返回True
计数。
如果您想要上面指定的确切格式的数据,只需reset_index
:
>>> df.groupby(['date', 'job'])[['issue', 'fixed']].sum().reset_index()
date job issue fixed
0 2020-02-01 ABC 2.0 1.0
1 2020-02-01 DEF 1.0 1.0
推荐阅读
- javascript - 在本机反应中显示来自firebase的图像(命中错误)
- video - ffmpeg 缩放 4k 视频并添加字幕
- c - 从 crtdefs.h 获取错误
- c++ - 创建 2 个读取和显示数据的函数
- python - Kivy:在 python 代码中设置小部件禁用属性
- r - geom_tile 中每个 x 的专属比例
- c# - Linq to SQL 未在 SubmitChanges() 上保存到数据库
- c - 将指向的值分配给其他指向的值
- python - 使用 API 的授权错误 401 - Python
- arrays - 将 2 个 json 文件合并到没有重复的新 json 中