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/