python - SQL "partition by"Python/R 中的类似功能

标签 python sql r pandas dplyr

R (data.table/dplyr) 或 Python 中是否有任何包可以以一致且直接的方式执行下面的 SQL 代码?

您能分享一些这样做的例子吗?

我需要的示例:

我的输入数据框(CSV,sep - “;”,标题 - True):

articule;group;is_new;ammount
1;fruits;1;100
2;fruits;1;200
3;fruits;1;300
4;fruits;0;400
5;frozen;0;500
6;frozen;0;600
7;frozen;0;700
8;frozen;1;800

我的预期输出(CSV,sep - “;”,标题 - True):

articule;group;is_new;ammount;sum_by_group;sum_by_group_is_new;result
1;fruits;1;100;1000;600;0.60
2;fruits;1;200;1000;600;0.60
3;fruits;1;300;1000;600;0.60
4;fruits;0;400;1000;400;0.40
5;frozen;0;500;2600;1800;0.69
6;frozen;0;600;2600;1800;0.69
7;frozen;0;700;2600;1800;0.69
8;frozen;1;800;2600;800;0.31

我的 SQL 代码:

select a.*, sum_by_group_is_new / sum_by_group result from (

select a.*, 
sum(ammount) over (partition by group) sum_by_group,
sum(ammount) over(partition by group, is_new) sum_by_group_is_new 
from input_data_frame a

) a;

致以诚挚的问候

最佳答案

在这种情况下,您可以将 transform 方法与 groupby 结合使用。它有点的工作原理类似于SQL的分区

df['sum_by_group'] = df.groupby('group').ammount.transform(sum)

df['sum_by_group_is_new'] = df.groupby(['group', 'is_new']).ammount.transform(sum)

df['result'] = df.sum_by_group_is_new / df.sum_by_group

这给了我以下输出数据帧。

   articule   group  is_new  ammount  sum_by_group  sum_by_group_is_new    result
0         1  fruits       1      100          1000                  600  0.600000
1         2  fruits       1      200          1000                  600  0.600000
2         3  fruits       1      300          1000                  600  0.600000
3         4  fruits       0      400          1000                  400  0.400000
4         5  frozen       0      500          2600                 1800  0.692308
5         6  frozen       0      600          2600                 1800  0.692308
6         7  frozen       0      700          2600                 1800  0.692308
7         8  frozen       1      800          2600                  800  0.307692

关于python - SQL "partition by"Python/R 中的类似功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436182/

相关文章:

python - 当类别是多字符串中的单个字符时创建虚拟对象

r - 如何在 R 中聚合某个位置内存在/不存在数据的多个观察结果?

r - 将表转换为向量以在r上使用hist()

r - 为什么 Shiny 应用程序在一段时间不使用时会断开连接?

python - 将 python 导入放入函数中是否会产生性能成本?

python - OpenCV Python 计数像素

python - 无法导入名称getoutput

php - 错误地在sql中显示产品

C# Sql 客户端 - 无法插入名称以数字开头的参数化列

sql - 小表上没有索引?