python - 如何根据多列对数据框进行分组并拆分一列?
问题描述
我有一个包含四列的数据集,我想根据其前三列对其数据进行分类,并计算第一列包含正值、零值或负值的次数。我还想为每个分类总结每个状态(正/零/负)中第 4 列的值。这是一个例子:
col1 col2 col3 col4
----------------------------
1 a Jack 2
1 a Jack 3
2 c Joe 0
3 c Joe -1
3 a Joe 1
1 a Jack -2
结果应如下所示:
col1 col2 col3 PCount PSum ZCount ZSum NCount NSum
------------------------------------------------------------------
1 a Jack 2 5 0 0 1 -2
2 c Joe 0 0 1 0 0 0
3 c Joe 0 0 0 0 1 -1
3 a Joe 1 1 0 0 0 0
PCount and PSum
是 (1 , a , Jack) 分别具有正值 incol4
及其总和的次数。ZCount and ZSum
分别包含 (1 , a , Jack) 的次数col4
及其总和为零的次数。NCount and NSum
分别显示 (1 , a , Jack) 具有正值的次数col4
及其总和。其余行也是如此。
关于如何在 python(或者可能是 sqlite)中编码的任何建议?我的数据集相当大(+12M 行)。
(我在这里问过这个问题的类似版本,还提供了我的代码,但它不能正常工作!)
解决方案
按 col1、col2、col3 分组后的条件聚合:
select col1, col2, col3,
sum(col4 > 0) PCount,
sum(case when col4 > 0 then col4 else 0 end) PSum,
sum(col4 = 0) ZCount,
0 ZSum,
sum(col4 < 0) NCount,
sum(case when col4 < 0 then col4 else 0 end) NSum
from tablename
group by col1, col2, col3
不需要计算ZSum
,对吧?
请参阅演示。
结果:
| col1 | col2 | col3 | PCount | PSum | ZCount | ZSum | NCount | NSum |
| ---- | ---- | ---- | ------ | ---- | ------ | ---- | ------ | ---- |
| 1 | a | Jack | 2 | 5 | 0 | 0 | 1 | -2 |
| 2 | c | Joe | 0 | 0 | 1 | 0 | 0 | 0 |
| 3 | a | Joe | 1 | 1 | 0 | 0 | 0 | 0 |
| 3 | c | Joe | 0 | 0 | 0 | 0 | 1 | -1 |
推荐阅读
- python - 具有自定义模型的分叉 django-oscar 应用程序无法迁移
- javascript - 从数组中删除项目时,管道不会更新模板
- xml - powershell - 遍历xml文件的文件目录并替换每个文件的特定节点
- azure - Azure 创建的 ARM 在 Azure 中无效
- java - 当 EditText 为空并且我按下按钮时,我的应用程序崩溃
- java - 无法运行 flink 示例程序,连接被拒绝
- r - 如何添加我的 R 包函数要使用的 CSS 外部文件?
- vue.js - 如何从拦截器中模糊组件
- javascript - 如何将外部 js 文件添加到 Laravel 项目 app.js 文件中?
- excel - 从列值创建工作表,并在每个工作表的特定单元格中的列中插入值